From 49ba8cf3e1545fbb0837de073c27b17bffe9a768 Mon Sep 17 00:00:00 2001 From: Jon Ross-Perkins Date: Mon, 29 Sep 2025 09:05:06 -0700 Subject: [PATCH] Switch class to use a blanket impl for `Destroy` (#6125) Right now, the class destroy impl is incorrectly generated (first discussed [in Discord](https://discord.com/channels/655572317891461132/941071822756143115/1418614787449032826)). If we want it to be correct, deferred definition logic would need to be added, and the declaration would need to be moved inside the `class` scope (along with whatever generic logic that needs). This instead switches to a blanket impl, to avoid creating latent bugs with generating the `impl` and function body in the wrong scope. This approach uses the same blanket impl as aggregate destruction that was added by #6098. The intent here is to allow progress on other parts of `Destroy`. For example, under this model the implementation of the function body could be done as part of lowering the specific. --- toolchain/check/BUILD | 2 - toolchain/check/check.cpp | 4 +- toolchain/check/check.h | 5 - toolchain/check/check_unit.cpp | 5 +- toolchain/check/check_unit.h | 2 +- toolchain/check/context.cpp | 3 +- toolchain/check/context.h | 9 +- toolchain/check/handle_class.cpp | 3 - toolchain/check/impl_lookup.cpp | 10 +- toolchain/check/implicit_type_impls.cpp | 215 -- toolchain/check/implicit_type_impls.h | 19 - toolchain/check/testdata/alias/basics.carbon | 4 +- .../check/testdata/alias/export_name.carbon | 31 - toolchain/check/testdata/array/basics.carbon | 2 +- .../testdata/as/adapter_conversion.carbon | 10 +- toolchain/check/testdata/as/basics.carbon | 55 +- toolchain/check/testdata/as/const.carbon | 55 +- .../check/testdata/as/maybe_unformed.carbon | 29 +- toolchain/check/testdata/as/partial.carbon | 42 +- .../testdata/basics/dump_sem_ir_ranges.carbon | 41 - .../testdata/basics/include_in_dumps.carbon | 30 +- .../testdata/class/access_modifers.carbon | 199 +- .../check/testdata/class/adapter/adapt.carbon | 149 +- .../testdata/class/adapter/adapt_copy.carbon | 337 +-- .../class/adapter/extend_adapt.carbon | 267 -- .../adapter/fail_adapt_with_subobjects.carbon | 174 -- .../testdata/class/adapter/init_adapt.carbon | 116 - toolchain/check/testdata/class/base.carbon | 116 - .../check/testdata/class/base_field.carbon | 60 +- .../class/base_function_unqualified.carbon | 58 - .../check/testdata/class/base_method.carbon | 57 +- .../class/base_method_qualified.carbon | 60 +- .../testdata/class/base_method_shadow.carbon | 103 - toolchain/check/testdata/class/basic.carbon | 31 - .../class/complete_in_member_fn.carbon | 31 - .../testdata/class/compound_field.carbon | 60 +- .../class/cross_package_import.carbon | 31 - .../testdata/class/derived_to_base.carbon | 28 +- .../check/testdata/class/destroy_calls.carbon | 235 +- .../check/testdata/class/fail_abstract.carbon | 490 +--- .../class/fail_abstract_in_tuple.carbon | 267 +- .../testdata/class/fail_addr_self.carbon | 28 - .../testdata/class/fail_error_recovery.carbon | 7 - .../check/testdata/class/field_access.carbon | 75 +- .../class/field_access_in_value.carbon | 75 +- .../check/testdata/class/generic/adapt.carbon | 380 +-- .../class/generic/base_is_generic.carbon | 351 +-- .../check/testdata/class/generic/basic.carbon | 63 - .../check/testdata/class/generic/call.carbon | 424 +-- .../generic/complete_in_conversion.carbon | 95 +- .../check/testdata/class/generic/field.carbon | 66 - .../testdata/class/generic/import.carbon | 633 +--- .../check/testdata/class/generic/init.carbon | 65 +- .../class/generic/member_access.carbon | 38 - .../class/generic/member_inline.carbon | 136 +- .../class/generic/member_out_of_line.carbon | 200 +- .../testdata/class/generic/member_type.carbon | 371 +-- .../class/generic/method_deduce.carbon | 135 +- .../testdata/class/generic/redeclare.carbon | 503 +--- .../check/testdata/class/generic/self.carbon | 120 +- .../testdata/class/generic/stringify.carbon | 349 --- .../testdata/class/generic_method.carbon | 66 - toolchain/check/testdata/class/import.carbon | 198 +- .../check/testdata/class/import_base.carbon | 100 +- .../testdata/class/import_forward_decl.carbon | 31 - .../testdata/class/import_indirect.carbon | 31 - .../testdata/class/import_member_cycle.carbon | 46 +- .../testdata/class/import_struct_cyle.carbon | 48 +- .../testdata/class/inheritance_access.carbon | 638 ---- toolchain/check/testdata/class/init.carbon | 31 +- toolchain/check/testdata/class/init_as.carbon | 48 +- .../check/testdata/class/init_nested.carbon | 58 - toolchain/check/testdata/class/local.carbon | 75 +- toolchain/check/testdata/class/method.carbon | 68 +- toolchain/check/testdata/class/nested.carbon | 122 +- .../check/testdata/class/nested_name.carbon | 77 +- toolchain/check/testdata/class/partial.carbon | 30 +- .../check/testdata/class/raw_self.carbon | 28 - .../check/testdata/class/raw_self_type.carbon | 90 +- .../check/testdata/class/redeclaration.carbon | 31 - .../class/redeclaration_introducer.carbon | 85 - .../check/testdata/class/reenter_scope.carbon | 31 - toolchain/check/testdata/class/reorder.carbon | 31 - .../testdata/class/reorder_qualified.carbon | 184 +- toolchain/check/testdata/class/scope.carbon | 66 +- toolchain/check/testdata/class/self.carbon | 59 - .../testdata/class/self_conversion.carbon | 63 +- .../check/testdata/class/self_type.carbon | 34 +- .../check/testdata/class/static_method.carbon | 44 +- .../class/syntactic_merge_literal.carbon | 260 -- .../class/todo_access_modifiers.carbon | 31 - .../testdata/class/virtual_modifiers.carbon | 2570 +---------------- toolchain/check/testdata/const/import.carbon | 4 +- toolchain/check/testdata/deduce/array.carbon | 239 +- .../testdata/deduce/binding_pattern.carbon | 132 - .../check/testdata/deduce/generic_type.carbon | 478 +-- toolchain/check/testdata/deduce/tuple.carbon | 182 -- .../testdata/deduce/type_operator.carbon | 128 +- .../value_with_type_through_access.carbon | 591 +--- .../facet/call_combined_impl_witness.carbon | 72 +- .../convert_class_type_to_facet_type.carbon | 41 +- ...t_class_type_to_generic_facet_value.carbon | 137 +- ...rt_class_value_to_facet_value_value.carbon | 50 +- ..._value_to_generic_facet_value_value.carbon | 288 +- ...t_value_as_type_knows_original_type.carbon | 34 +- .../convert_facet_value_to_itself.carbon | 41 +- ..._value_to_generic_facet_value_value.carbon | 86 +- ...convert_facet_value_value_to_itself.carbon | 52 +- ...t_class_type_to_generic_facet_value.carbon | 85 - ...l_convert_type_erased_type_to_facet.carbon | 35 +- ...uction_uses_runtime_type_conversion.carbon | 162 +- toolchain/check/testdata/for/actual.carbon | 214 +- toolchain/check/testdata/for/basic.carbon | 46 +- toolchain/check/testdata/for/pattern.carbon | 186 +- .../call/fail_return_type_mismatch.carbon | 20 +- .../check/testdata/function/call/i32.carbon | 18 +- .../call/prefer_unqualified_lookup.carbon | 128 - .../fail_import_incomplete_return.carbon | 104 +- .../testdata/function/generic/call.carbon | 6 - .../call_method_on_generic_facet.carbon | 58 - .../testdata/function/generic/deduce.carbon | 206 +- .../generic/deduce_nested_facet_value.carbon | 93 - .../function/generic/resolve_used.carbon | 71 +- .../function/generic/return_slot.carbon | 148 +- .../testdata/generic/call_basic_depth.carbon | 8 +- .../testdata/generic/complete_type.carbon | 123 +- .../testdata/generic/dependent_param.carbon | 90 +- toolchain/check/testdata/generic/local.carbon | 250 +- .../testdata/generic/template/convert.carbon | 62 - .../generic/template/member_access.carbon | 120 - .../generic/template/unimplemented.carbon | 49 +- .../if_expr/constant_condition.carbon | 36 +- .../if_expr/fail_not_in_function.carbon | 64 - .../testdata/impl/assoc_const_self.carbon | 33 +- .../testdata/impl/extend_impl_generic.carbon | 186 +- .../impl/fail_extend_impl_scope.carbon | 48 +- .../impl/fail_extend_impl_type_as.carbon | 89 +- .../impl/fail_extend_non_interface.carbon | 31 - .../testdata/impl/fail_impl_as_scope.carbon | 83 +- .../impl/fail_impl_bad_assoc_fn.carbon | 380 --- .../impl/fail_self_type_mismatch.carbon | 76 - .../check/testdata/impl/forward_decls.carbon | 596 +--- toolchain/check/testdata/impl/impl_as.carbon | 52 +- .../check/testdata/impl/impl_thunk.carbon | 32 +- .../check/testdata/impl/import_thunk.carbon | 297 +- .../check/testdata/impl/interface_args.carbon | 453 +-- .../impl/lookup/canonical_query_self.carbon | 84 +- .../check/testdata/impl/lookup/generic.carbon | 176 +- .../testdata/impl/lookup/impl_forall.carbon | 46 +- .../check/testdata/impl/lookup/import.carbon | 879 +----- .../impl/lookup/instance_method.carbon | 63 +- ...g_generic_inside_rewrite_constraint.carbon | 132 - ...pecialization_with_symbolic_rewrite.carbon | 62 - .../testdata/impl/lookup/transitive.carbon | 85 +- .../check/testdata/impl/redeclaration.carbon | 35 +- .../testdata/impl/use_assoc_const.carbon | 388 +-- .../testdata/index/fail_name_not_found.carbon | 20 +- .../testdata/interface/as_type_of_type.carbon | 44 +- .../interface/compound_member_access.carbon | 107 +- .../testdata/interface/default_fn.carbon | 56 +- ..._todo_define_default_fn_out_of_line.carbon | 66 - .../testdata/interface/generic_method.carbon | 280 +- .../testdata/interop/cpp/class/class.carbon | 33 +- .../testdata/interop/cpp/class/method.carbon | 14 +- .../function/arithmetic_types_bridged.carbon | 196 +- .../interop/cpp/function/full_semir.carbon | 18 +- .../interop/cpp/function/inline.carbon | 22 +- .../interop/cpp/function/overloads.carbon | 36 +- .../check/testdata/interop/cpp/typedef.carbon | 18 +- .../testdata/let/compile_time_bindings.carbon | 178 +- .../namespace/fail_not_top_level.carbon | 37 +- .../merging_with_indirections.carbon | 112 +- .../check/testdata/namespace/shadow.carbon | 32 +- .../operators/builtin/assignment.carbon | 21 +- .../fail_and_or_not_in_function.carbon | 64 - .../fail_assignment_to_non_assignable.carbon | 34 +- .../fail_redundant_compound_access.carbon | 22 +- .../fail_type_mismatch_assignment.carbon | 22 +- .../testdata/operators/overloaded/add.carbon | 2 +- .../operators/overloaded/bit_and.carbon | 2 +- .../operators/overloaded/bit_or.carbon | 2 +- .../operators/overloaded/bit_xor.carbon | 2 +- .../testdata/operators/overloaded/dec.carbon | 8 +- .../testdata/operators/overloaded/div.carbon | 2 +- .../testdata/operators/overloaded/eq.carbon | 120 - .../overloaded/fail_assign_non_ref.carbon | 36 +- .../operators/overloaded/fail_no_impl.carbon | 58 +- .../operators/overloaded/implicit_as.carbon | 64 +- .../testdata/operators/overloaded/inc.carbon | 8 +- .../overloaded/index_with_prelude.carbon | 201 -- .../operators/overloaded/left_shift.carbon | 2 +- .../testdata/operators/overloaded/mod.carbon | 2 +- .../testdata/operators/overloaded/mul.carbon | 2 +- .../operators/overloaded/ordered.carbon | 62 - .../operators/overloaded/right_shift.carbon | 2 +- .../testdata/operators/overloaded/sub.carbon | 2 +- .../package_expr/fail_not_found.carbon | 20 +- .../check/testdata/package_expr/syntax.carbon | 63 +- .../check/testdata/packages/raw_core.carbon | 31 - .../testdata/pointer/address_of_deref.carbon | 22 +- toolchain/check/testdata/pointer/arrow.carbon | 31 +- toolchain/check/testdata/pointer/basic.carbon | 22 +- .../pointer/convert_qualifiers.carbon | 8 +- .../fail_return_with_returned_var.carbon | 50 +- .../return/fail_returned_var_shadow.carbon | 64 +- .../return/fail_returned_var_type.carbon | 22 +- .../return/import_convert_function.carbon | 808 ++---- .../check/testdata/return/returned_var.carbon | 56 +- .../testdata/return/returned_var_scope.carbon | 74 +- toolchain/check/testdata/struct/import.carbon | 6 +- toolchain/check/testdata/tuple/import.carbon | 6 +- .../check/testdata/var/var_pattern.carbon | 39 +- toolchain/driver/compile_subcommand.cpp | 14 - toolchain/driver/compile_subcommand.h | 1 - .../testdata/document_symbol/nested.carbon | 20 +- toolchain/lower/testdata/class/convert.carbon | 4 +- toolchain/lower/testdata/class/generic.carbon | 14 +- toolchain/lower/testdata/class/virtual.carbon | 44 +- toolchain/lower/testdata/for/bindings.carbon | 4 +- .../function/definition/destroy.carbon | 1 - .../testdata/function/generic/call.carbon | 8 +- .../function/generic/call_basic.carbon | 16 +- .../function/generic/call_basic_depth.carbon | 6 +- .../function/generic/call_deref_ptr.carbon | 24 +- .../call_different_impls_with_const.carbon | 6 +- .../generic/call_different_specific.carbon | 24 +- .../function/generic/call_method.carbon | 4 +- .../generic/type_representation.carbon | 12 +- .../lower/testdata/let/copy_value_rep.carbon | 4 +- .../testing/testdata/min_prelude/none.carbon | 2 +- 230 files changed, 3632 insertions(+), 21983 deletions(-) delete mode 100644 toolchain/check/implicit_type_impls.cpp delete mode 100644 toolchain/check/implicit_type_impls.h diff --git a/toolchain/check/BUILD b/toolchain/check/BUILD index dee28498957a..145420344865 100644 --- a/toolchain/check/BUILD +++ b/toolchain/check/BUILD @@ -41,7 +41,6 @@ cc_library( "impl.cpp", "impl_lookup.cpp", "impl_validation.cpp", - "implicit_type_impls.cpp", "import.cpp", "import_ref.cpp", "inst.cpp", @@ -95,7 +94,6 @@ cc_library( "impl.h", "impl_lookup.h", "impl_validation.h", - "implicit_type_impls.h", "import.h", "import_ref.h", "inst.h", diff --git a/toolchain/check/check.cpp b/toolchain/check/check.cpp index 2b1060b6261c..5edae15174dd 100644 --- a/toolchain/check/check.cpp +++ b/toolchain/check/check.cpp @@ -470,7 +470,7 @@ auto CheckParseTrees( check_index < static_cast(ready_to_check.size()); ++check_index) { auto* unit_info = ready_to_check[check_index]; CheckUnit(unit_info, &tree_and_subtrees_getters, fs, clang_invocation, - options.gen_implicit_type_impls, options.vlog_stream) + options.vlog_stream) .Run(); for (auto* incoming_import : unit_info->incoming_imports) { --incoming_import->imports_remaining; @@ -519,7 +519,7 @@ auto CheckParseTrees( for (auto& unit_info : unit_infos) { if (unit_info.imports_remaining > 0) { CheckUnit(&unit_info, &tree_and_subtrees_getters, fs, clang_invocation, - options.gen_implicit_type_impls, options.vlog_stream) + options.vlog_stream) .Run(); } } diff --git a/toolchain/check/check.h b/toolchain/check/check.h index ce157e63f8ed..098ca02550d8 100644 --- a/toolchain/check/check.h +++ b/toolchain/check/check.h @@ -42,11 +42,6 @@ struct CheckParseTreesOptions { // Whether to import the prelude. bool prelude_import = false; - // Whether to generate standard `impl`s for types, such as `Core.Destroy`. - // This only controls generation of the `impl`; code which expects the `impl` - // is expected to fail. - bool gen_implicit_type_impls = true; - // If set, enables verbose output. llvm::raw_ostream* vlog_stream = nullptr; diff --git a/toolchain/check/check_unit.cpp b/toolchain/check/check_unit.cpp index 5bc8ea18e0f0..1a38a0fef181 100644 --- a/toolchain/check/check_unit.cpp +++ b/toolchain/check/check_unit.cpp @@ -60,7 +60,7 @@ CheckUnit::CheckUnit( const Parse::GetTreeAndSubtreesStore* tree_and_subtrees_getters, llvm::IntrusiveRefCntPtr fs, std::shared_ptr clang_invocation, - bool gen_implicit_type_impls, llvm::raw_ostream* vlog_stream) + llvm::raw_ostream* vlog_stream) : unit_and_imports_(unit_and_imports), tree_and_subtrees_getter_(tree_and_subtrees_getters->Get( unit_and_imports->unit->sem_ir->check_ir_id())), @@ -71,8 +71,7 @@ CheckUnit::CheckUnit( context_(&emitter_, tree_and_subtrees_getter_, unit_and_imports_->unit->sem_ir, GetImportedIRCount(unit_and_imports), - unit_and_imports_->unit->total_ir_count, gen_implicit_type_impls, - vlog_stream) {} + unit_and_imports_->unit->total_ir_count, vlog_stream) {} auto CheckUnit::Run() -> void { Timings::ScopedTiming timing(unit_and_imports_->unit->timings, "check"); diff --git a/toolchain/check/check_unit.h b/toolchain/check/check_unit.h index 84d3c7698a96..e3c4ed483e12 100644 --- a/toolchain/check/check_unit.h +++ b/toolchain/check/check_unit.h @@ -128,7 +128,7 @@ class CheckUnit { const Parse::GetTreeAndSubtreesStore* tree_and_subtrees_getters, llvm::IntrusiveRefCntPtr fs, std::shared_ptr clang_invocation, - bool gen_implicit_type_impls, llvm::raw_ostream* vlog_stream); + llvm::raw_ostream* vlog_stream); // Produces and checks the IR for the provided unit. auto Run() -> void; diff --git a/toolchain/check/context.cpp b/toolchain/check/context.cpp index 89773f8ba651..04982a7a3218 100644 --- a/toolchain/check/context.cpp +++ b/toolchain/check/context.cpp @@ -16,12 +16,11 @@ namespace Carbon::Check { Context::Context(DiagnosticEmitterBase* emitter, Parse::GetTreeAndSubtreesFn tree_and_subtrees_getter, SemIR::File* sem_ir, int imported_ir_count, int total_ir_count, - bool gen_implicit_type_impls, llvm::raw_ostream* vlog_stream) + llvm::raw_ostream* vlog_stream) : emitter_(emitter), tree_and_subtrees_getter_(tree_and_subtrees_getter), sem_ir_(sem_ir), total_ir_count_(total_ir_count), - gen_implicit_type_impls_(gen_implicit_type_impls), vlog_stream_(vlog_stream), node_stack_(sem_ir->parse_tree(), vlog_stream), inst_block_stack_("inst_block_stack_", *sem_ir, vlog_stream), diff --git a/toolchain/check/context.h b/toolchain/check/context.h index 6f90a27f32ce..fd90d9d5aad7 100644 --- a/toolchain/check/context.h +++ b/toolchain/check/context.h @@ -58,8 +58,7 @@ class Context { explicit Context(DiagnosticEmitterBase* emitter, Parse::GetTreeAndSubtreesFn tree_and_subtrees_getter, SemIR::File* sem_ir, int imported_ir_count, - int total_ir_count, bool gen_implicit_type_impls, - llvm::raw_ostream* vlog_stream); + int total_ir_count, llvm::raw_ostream* vlog_stream); // Marks an implementation TODO. Always returns false. auto TODO(SemIR::LocId loc_id, std::string label) -> bool; @@ -93,8 +92,6 @@ class Context { return parse_tree().tokens(); } - auto gen_implicit_type_impls() -> bool { return gen_implicit_type_impls_; } - auto vlog_stream() -> llvm::raw_ostream* { return vlog_stream_; } auto node_stack() -> NodeStack& { return node_stack_; } @@ -330,10 +327,6 @@ class Context { // The total number of files. int total_ir_count_; - // Whether to generate standard `impl`s for types, such as `Core.Destroy`; see - // `CheckParseTreesOptions`. - bool gen_implicit_type_impls_; - // Whether to print verbose output. llvm::raw_ostream* vlog_stream_; diff --git a/toolchain/check/handle_class.cpp b/toolchain/check/handle_class.cpp index b5c85cea72b7..b57df505b7af 100644 --- a/toolchain/check/handle_class.cpp +++ b/toolchain/check/handle_class.cpp @@ -15,7 +15,6 @@ #include "toolchain/check/generic.h" #include "toolchain/check/handle.h" #include "toolchain/check/impl.h" -#include "toolchain/check/implicit_type_impls.h" #include "toolchain/check/import.h" #include "toolchain/check/import_ref.h" #include "toolchain/check/inst.h" @@ -567,8 +566,6 @@ auto HandleParseNode(Context& context, Parse::ClassDefinitionId node_id) auto class_id = context.node_stack().Pop(); - MakeClassDestroyImpl(context, class_id); - // The class type is now fully defined. Compute its object representation. ComputeClassObjectRepr(context, node_id, class_id, context.field_decls_stack().PeekArray(), diff --git a/toolchain/check/impl_lookup.cpp b/toolchain/check/impl_lookup.cpp index 032da184dfba..150e3f0c782f 100644 --- a/toolchain/check/impl_lookup.cpp +++ b/toolchain/check/impl_lookup.cpp @@ -550,16 +550,18 @@ static auto TypeCanAggregateDestroy(Context& context, context.constant_values().GetInstId(query_self_const_id)); CARBON_KIND_SWITCH(inst) { case CARBON_KIND(SemIR::ClassType class_type): { - // Carbon classes will generate a `Destroy` impl, but we use this to - // provide destruction for `Cpp`-scoped classes. - // TODO: Don't provide this for C++ types that lack a destructor. auto class_info = context.classes().Get(class_type.class_id); - return context.name_scopes().Get(class_info.scope_id).is_cpp_scope(); + // Incomplete classes can't be destroyed. + // TODO: Return false if the object repr doesn't impl `Destroy`. + // TODO: Return false for C++ types that lack a destructor. + return class_info.is_complete(); } case SemIR::ArrayType::Kind: case SemIR::MaybeUnformedType::Kind: case SemIR::StructType::Kind: case SemIR::TupleType::Kind: + // TODO: Return false for types that indirectly reference a type that + // doesn't impl `Destroy`. return true; default: return false; diff --git a/toolchain/check/implicit_type_impls.cpp b/toolchain/check/implicit_type_impls.cpp deleted file mode 100644 index 532a6b4c71ec..000000000000 --- a/toolchain/check/implicit_type_impls.cpp +++ /dev/null @@ -1,215 +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/implicit_type_impls.h" - -#include "toolchain/check/convert.h" -#include "toolchain/check/generic.h" -#include "toolchain/check/impl.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/type.h" -#include "toolchain/sem_ir/ids.h" - -namespace Carbon::Check { - -// Produces an `impl as ` declaration. The caller -// should inspect the resulting `impl` to ensure it's incomplete before -// proceeding to define it. -static auto TryDeclareImpl(Context& context, SemIR::LocId loc_id, - SemIR::NameScopeId parent_scope_id, - SemIR::TypeId self_type_id, - SemIR::InstId interface_id) - -> std::pair { - StartGenericDecl(context); - - // Build the implicit access to the enclosing `Self`. - // TODO: This mirrors code in handle_impl that also suggests using - // BuildNameRef. - auto self_inst_id = AddTypeInst( - context, loc_id, - SemIR::NameRef{.type_id = SemIR::TypeType::TypeId, - .name_id = SemIR::NameId::SelfType, - .value_id = context.types().GetInstId(self_type_id)}); - AddNameToLookup(context, SemIR::NameId::SelfType, self_inst_id); - - auto impl_decl_id = AddPlaceholderInst( - context, - SemIR::LocIdAndInst::UncheckedLoc( - loc_id, SemIR::ImplDecl{.impl_id = SemIR::ImplId::None, - .decl_block_id = SemIR::InstBlockId::Empty})); - - auto constraint_id = ExprAsType(context, loc_id, interface_id).inst_id; - - SemIR::Impl impl = { - { - .name_id = SemIR::NameId::None, - .parent_scope_id = parent_scope_id, - .generic_id = SemIR::GenericId::None, - .first_param_node_id = Parse::NodeId::None, - .last_param_node_id = Parse::NodeId::None, - .pattern_block_id = SemIR::InstBlockId::None, - .implicit_param_patterns_id = SemIR::InstBlockId::None, - .param_patterns_id = SemIR::InstBlockId::None, - .is_extern = false, - .extern_library_id = SemIR::LibraryNameId::None, - .non_owning_decl_id = SemIR::InstId::None, - .first_owning_decl_id = impl_decl_id, - }, - { - .self_id = self_inst_id, - .constraint_id = constraint_id, - .interface = - CheckConstraintIsInterface(context, impl_decl_id, constraint_id), - .is_final = true, - }}; - - return StartImplDecl(context, loc_id, - /*implicit_params_loc_id=*/SemIR::LocId::None, impl, - /*is_definition=*/true, /*extend_impl=*/std::nullopt); -} - -// Constructs the implicit params for the `Op` function. Returns the block and -// the `self` pattern. -static auto MakeImplicitParams(Context& context, SemIR::LocId loc_id) - -> std::pair { - BeginSubpattern(context); - - auto result = LookupUnqualifiedName(context, loc_id, SemIR::NameId::SelfType); - auto self_id = - BuildNameRef(context, loc_id, SemIR::NameId::SelfType, - result.scope_result.target_inst_id(), result.specific_id); - auto self_type_expr = ExprAsType(context, loc_id, self_id); - - SemIR::ExprRegionId type_expr_region_id = - EndSubpatternAsExpr(context, self_type_expr.inst_id); - - auto self_pattern_id = AddAddrSelfParamPattern( - context, loc_id, type_expr_region_id, self_type_expr.inst_id); - - auto implicit_param_patterns_id = - context.inst_blocks().Add({self_pattern_id}); - return {implicit_param_patterns_id, self_pattern_id}; -} - -// Defines the `Op` function for the `impl`. -static auto DeclareImplOpFunction(Context& context, SemIR::LocId loc_id, - const SemIR::Impl& impl) - -> std::pair { - StartGenericDecl(context); - - auto name_id = SemIR::NameId::ForIdentifier(context.identifiers().Add("Op")); - - context.inst_block_stack().Push(); - - context.pattern_block_stack().Push(); - auto [implicit_param_patterns_id, self_pattern_id] = - MakeImplicitParams(context, loc_id); - constexpr auto NoRegularParams = SemIR::InstBlockId::Empty; - constexpr auto NoReturnSlot = SemIR::InstId::None; - auto pattern_block_id = context.pattern_block_stack().Pop(); - - // Perform callee-side pattern matching to rebuild the parameter list. - auto call_params_id = CalleePatternMatch(context, implicit_param_patterns_id, - NoRegularParams, NoReturnSlot); - auto decl_block_id = context.inst_block_stack().Pop(); - - // Create the `FunctionDecl` instruction. - SemIR::FunctionDecl function_decl = {SemIR::TypeId::None, - SemIR::FunctionId::None, decl_block_id}; - auto decl_id = AddPlaceholderInst( - context, SemIR::LocIdAndInst::UncheckedLoc(loc_id, function_decl)); - auto generic_id = BuildGenericDecl(context, decl_id); - - // Create the `Function` object. - function_decl.function_id = context.functions().Add(SemIR::Function{ - { - .name_id = name_id, - .parent_scope_id = impl.scope_id, - .generic_id = generic_id, - .first_param_node_id = Parse::NodeId::None, - .last_param_node_id = Parse::NodeId::None, - .pattern_block_id = pattern_block_id, - .implicit_param_patterns_id = implicit_param_patterns_id, - .param_patterns_id = NoRegularParams, - .is_extern = false, - .extern_library_id = SemIR::LibraryNameId::None, - .non_owning_decl_id = SemIR::InstId::None, - .first_owning_decl_id = decl_id, - }, - { - .call_params_id = call_params_id, - .return_slot_pattern_id = NoReturnSlot, - .virtual_modifier = SemIR::FunctionFields::VirtualModifier::None, - .virtual_index = -1, - .self_param_id = self_pattern_id, - }}); - function_decl.type_id = - GetFunctionType(context, function_decl.function_id, - context.scope_stack().PeekSpecificId()); - ReplaceInstBeforeConstantUse(context, decl_id, function_decl); - context.name_scopes().AddRequiredName(impl.scope_id, name_id, decl_id); - - return {function_decl.function_id, decl_id}; -} - -auto MakeClassDestroyImpl(Context& context, SemIR::ClassId class_id) -> void { - if (!context.gen_implicit_type_impls()) { - return; - } - - // Identify the type and interface for implementation. - auto& class_info = context.classes().Get(class_id); - auto loc_id = context.insts().GetLocIdForDesugaring( - SemIR::LocId(class_info.latest_decl_id())); - - auto destroy_id = LookupNameInCore(context, loc_id, "Destroy"); - if (destroy_id == SemIR::ErrorInst::InstId) { - return; - } - - // Declare the `impl`. - auto [impl_id, impl_decl_id] = - TryDeclareImpl(context, loc_id, class_info.scope_id, - class_info.self_type_id, destroy_id); - auto& impl = context.impls().Get(impl_id); - if (impl.is_complete()) { - return; - } - - // Define the `impl`. - impl.definition_id = impl_decl_id; - impl.scope_id = context.name_scopes().Add(impl_decl_id, SemIR::NameId::None, - class_info.scope_id); - - context.scope_stack().PushForEntity( - impl_decl_id, impl.scope_id, - context.generics().GetSelfSpecific(impl.generic_id)); - StartGenericDefinition(context, impl.generic_id); - context.inst_block_stack().Push(); - - // Declare the `Op` function. - auto [fn_id, fn_decl_id] = DeclareImplOpFunction(context, loc_id, impl); - - // Define the `Op` function. - // TODO: Add an actual definition. - context.scope_stack().PushForFunctionBody(fn_decl_id); - auto& function = context.functions().Get(fn_id); - function.SetBuiltinFunction(SemIR::BuiltinFunctionKind::NoOp); - StartGenericDefinition(context, function.generic_id); - FinishGenericDefinition(context, function.generic_id); - context.scope_stack().Pop(); - - // Close the `impl` definition. - FinishImplWitness(context, impl_id); - impl.defined = true; - FinishGenericDefinition(context, impl.generic_id); - context.scope_stack().Pop(); - impl.body_block_id = context.inst_block_stack().Pop(); -} - -} // namespace Carbon::Check diff --git a/toolchain/check/implicit_type_impls.h b/toolchain/check/implicit_type_impls.h deleted file mode 100644 index 327d7478b3e1..000000000000 --- a/toolchain/check/implicit_type_impls.h +++ /dev/null @@ -1,19 +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_IMPLICIT_TYPE_IMPLS_H_ -#define CARBON_TOOLCHAIN_CHECK_IMPLICIT_TYPE_IMPLS_H_ - -#include "toolchain/check/context.h" - -namespace Carbon::Check { - -// Constructs `impl as Destroy { ... }`, with appropriate implementation -// based on the `destroy` function and members. -// TODO: Also generate the impl for `partial T` for non-final types. -auto MakeClassDestroyImpl(Context& context, SemIR::ClassId class_id) -> void; - -} // namespace Carbon::Check - -#endif // CARBON_TOOLCHAIN_CHECK_IMPLICIT_TYPE_IMPLS_H_ diff --git a/toolchain/check/testdata/alias/basics.carbon b/toolchain/check/testdata/alias/basics.carbon index dfd956817922..7aa2e343f33a 100644 --- a/toolchain/check/testdata/alias/basics.carbon +++ b/toolchain/check/testdata/alias/basics.carbon @@ -171,7 +171,7 @@ extern alias C = Class; // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -186,7 +186,7 @@ extern alias C = Class; // CHECK:STDOUT: %b.ref: type = name_ref b, %b [concrete = constants.%C] // CHECK:STDOUT: %c: type = bind_alias c, %b [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.c48 = binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type = binding_pattern d [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: type = name_ref c, %c [concrete = constants.%C] // CHECK:STDOUT: %.loc10_13.1: ref %C = temporary_storage diff --git a/toolchain/check/testdata/alias/export_name.carbon b/toolchain/check/testdata/alias/export_name.carbon index a09d2897b10e..cd836df8f11f 100644 --- a/toolchain/check/testdata/alias/export_name.carbon +++ b/toolchain/check/testdata/alias/export_name.carbon @@ -76,24 +76,15 @@ var d: D* = &c; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -108,27 +99,7 @@ var d: D* = &c; // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -136,8 +107,6 @@ var d: D* = &c; // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- export.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/array/basics.carbon b/toolchain/check/testdata/array/basics.carbon index 2a438953c587..9e9880e1e161 100644 --- a/toolchain/check/testdata/array/basics.carbon +++ b/toolchain/check/testdata/array/basics.carbon @@ -169,10 +169,10 @@ var a: array(1, 1); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.734: type = tuple_type (%C, %C, %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] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_2, %tuple.type.734 [concrete] diff --git a/toolchain/check/testdata/as/adapter_conversion.carbon b/toolchain/check/testdata/as/adapter_conversion.carbon index b1167cd17809..4c1a7d3b15a6 100644 --- a/toolchain/check/testdata/as/adapter_conversion.carbon +++ b/toolchain/check/testdata/as/adapter_conversion.carbon @@ -189,9 +189,9 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: %A.Make.type: type = fn_type @A.Make [concrete] // CHECK:STDOUT: %A.Make: %A.Make.type = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] // CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %a_ref.var: ref %B = var file.%a_ref.var_patt [concrete] // CHECK:STDOUT: %addr: %ptr.e79 = addr_of %a_ref.var [concrete] // CHECK:STDOUT: } @@ -320,7 +320,7 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %D [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %D.val: %D = struct_value () [concrete] // CHECK:STDOUT: } @@ -330,7 +330,7 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %pattern_type.510 = binding_pattern d [concrete] +// CHECK:STDOUT: %d.patt: %pattern_type = binding_pattern d [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %D.ref: type = name_ref D, %D.decl [concrete = constants.%D] // CHECK:STDOUT: %d: %D = bind_name d, @__global_init.%.loc10_15.2 @@ -431,7 +431,7 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %tuple.type.c8c: type = tuple_type (%empty_struct_type, type) [concrete] // CHECK:STDOUT: %tuple.type.a10: type = tuple_type (%empty_struct_type, %Noncopyable) [concrete] -// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -440,7 +440,7 @@ var b: B = {.x = ()} as B; // CHECK:STDOUT: fn @F(%a.param: %A) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_value.patt: %pattern_type.c10 = binding_pattern a_value [concrete] +// CHECK:STDOUT: %a_value.patt: %pattern_type = binding_pattern a_value [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %A = name_ref a, %a // CHECK:STDOUT: %.loc14_28: %empty_struct_type = struct_literal () diff --git a/toolchain/check/testdata/as/basics.carbon b/toolchain/check/testdata/as/basics.carbon index 6afc533e7232..fc8e902cad6a 100644 --- a/toolchain/check/testdata/as/basics.carbon +++ b/toolchain/check/testdata/as/basics.carbon @@ -203,18 +203,19 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.b67: type = tuple_type (%X, %X) [concrete] // CHECK:STDOUT: %pattern_type.bb7: type = pattern_type %tuple.type.b67 [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] -// CHECK:STDOUT: %facet_value: %type_where = facet_value %tuple.type.b67, () [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.1bb: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %facet_value.b19: %type_where = facet_value %X, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.b19) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.177: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] +// CHECK:STDOUT: %facet_value.4ff: %type_where = facet_value %tuple.type.b67, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.1bb: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.4ff) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.482: %AggregateT.as_type.as.Destroy.impl.Op.type.1bb = struct_value () [concrete] // CHECK:STDOUT: %ptr.120: type = ptr_type %tuple.type.b67 [concrete] // CHECK:STDOUT: } @@ -251,12 +252,20 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: %tuple: %tuple.type.b67 = tuple_value (%.loc13_25.3, %.loc13_33.3) // CHECK:STDOUT: %.loc13_34.2: %tuple.type.b67 = converted %.loc13_34.1, %tuple // CHECK:STDOUT: %a: %tuple.type.b67 = bind_name a, %.loc13_34.2 -// CHECK:STDOUT: %X.as.Destroy.impl.Op.bound.loc13_33: = bound_method %.loc13_33.2, constants.%X.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc13_33: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value.b19] +// CHECK:STDOUT: %.loc13_33.4: %type_where = converted constants.%X, %facet_value.loc13_33 [concrete = constants.%facet_value.b19] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13_33: = bound_method %.loc13_33.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.177 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc13_33: = bound_method %.loc13_33.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc13_33: %ptr.d17 = addr_of %.loc13_33.2 -// CHECK:STDOUT: %X.as.Destroy.impl.Op.call.loc13_33: init %empty_tuple.type = call %X.as.Destroy.impl.Op.bound.loc13_33(%addr.loc13_33) -// CHECK:STDOUT: %X.as.Destroy.impl.Op.bound.loc13_25: = bound_method %.loc13_25.2, constants.%X.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13_33: init %empty_tuple.type = call %bound_method.loc13_33(%addr.loc13_33) +// CHECK:STDOUT: %facet_value.loc13_25: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value.b19] +// CHECK:STDOUT: %.loc13_25.4: %type_where = converted constants.%X, %facet_value.loc13_25 [concrete = constants.%facet_value.b19] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13_25: = bound_method %.loc13_25.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.177 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc13_25: = bound_method %.loc13_25.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc13_25: %ptr.d17 = addr_of %.loc13_25.2 -// CHECK:STDOUT: %X.as.Destroy.impl.Op.call.loc13_25: init %empty_tuple.type = call %X.as.Destroy.impl.Op.bound.loc13_25(%addr.loc13_25) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13_25: init %empty_tuple.type = call %bound_method.loc13_25(%addr.loc13_25) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -288,8 +297,8 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: %.loc20_15.3: type = converted %.loc20_15.2, constants.%tuple.type.b67 [concrete = constants.%tuple.type.b67] // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %tuple.type.b67 = bind_name b, %b.var -// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.b67, () [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc20_3.2: %type_where = converted constants.%tuple.type.b67, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.b67, () [concrete = constants.%facet_value.4ff] +// CHECK:STDOUT: %.loc20_3.2: %type_where = converted constants.%tuple.type.b67, %facet_value [concrete = constants.%facet_value.4ff] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.482 // CHECK:STDOUT: // CHECK:STDOUT: %bound_method: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn @@ -302,14 +311,16 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] +// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] // CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %X, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.177: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -352,15 +363,19 @@ let n: {.x: ()} = {.x = ()} as {.x = ()}; // 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] -// CHECK:STDOUT: %.loc24: ref %X = splice_block %x.var {} -// CHECK:STDOUT: %Make.call: init %X = call %Make.ref() to %.loc24 +// CHECK:STDOUT: %.loc24_3.1: ref %X = splice_block %x.var {} +// CHECK:STDOUT: %Make.call: init %X = call %Make.ref() to %.loc24_3.1 // CHECK:STDOUT: %X.ref.loc24_25: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: assign %x.var, %Make.call // CHECK:STDOUT: %X.ref.loc24_10: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %x: ref %X = bind_name x, %x.var -// CHECK:STDOUT: %X.as.Destroy.impl.Op.bound: = bound_method %x.var, constants.%X.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc24_3.2: %type_where = converted constants.%X, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %x.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.177 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method: = bound_method %x.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.d17 = addr_of %x.var -// CHECK:STDOUT: %X.as.Destroy.impl.Op.call: init %empty_tuple.type = call %X.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/as/const.carbon b/toolchain/check/testdata/as/const.carbon index e74a8877a6fa..911ca77b9f8c 100644 --- a/toolchain/check/testdata/as/const.carbon +++ b/toolchain/check/testdata/as/const.carbon @@ -96,24 +96,31 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7d5: = impl_witness @X.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Destroy.facet.387: %Destroy.type = facet_value %X, (%Destroy.impl_witness.7d5) [concrete] // CHECK:STDOUT: %Init.type: type = fn_type @Init [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Init: %Init.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] // CHECK:STDOUT: %const.dde: type = const_type %X [concrete] // CHECK:STDOUT: %pattern_type.d7f91: type = pattern_type %const.dde [concrete] // CHECK:STDOUT: %ptr.cbd: type = ptr_type %const.dde [concrete] // CHECK:STDOUT: %pattern_type.855: type = pattern_type %ptr.cbd [concrete] // CHECK:STDOUT: %reference.var: ref %const.dde = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.0c5: %ptr.cbd = addr_of %reference.var [concrete] -// CHECK:STDOUT: %const.as.Destroy.impl.Op.type.7c9: type = fn_type @const.as.Destroy.impl.Op, @const.as.Destroy.impl(%Destroy.facet.387) [concrete] -// CHECK:STDOUT: %const.as.Destroy.impl.Op.60f: %const.as.Destroy.impl.Op.type.7c9 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %AggregateT: %type_where = bind_symbolic_name AggregateT, 0 [symbolic] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.190: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%AggregateT) [symbolic] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.8a0: %AggregateT.as_type.as.Destroy.impl.Op.type.190 = struct_value () [symbolic] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %X, () [concrete] +// CHECK:STDOUT: %Destroy.impl_witness.079: = impl_witness imports.%Destroy.impl_witness_table.2d3, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %Destroy.facet.074: %Destroy.type = facet_value %X, (%Destroy.impl_witness.079) [concrete] +// CHECK:STDOUT: %const.as.Destroy.impl.Op.type.4e9: type = fn_type @const.as.Destroy.impl.Op, @const.as.Destroy.impl(%Destroy.facet.074) [concrete] +// CHECK:STDOUT: %const.as.Destroy.impl.Op.3cc: %const.as.Destroy.impl.Op.type.4e9 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.d51: @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op.type (%AggregateT.as_type.as.Destroy.impl.Op.type.190) = import_ref Core//prelude/parts/destroy, loc29_29, loaded [symbolic = @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op (constants.%AggregateT.as_type.as.Destroy.impl.Op.8a0)] +// CHECK:STDOUT: %Destroy.impl_witness_table.2d3 = impl_witness_table (%Core.import_ref.d51), @AggregateT.as_type.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Use() { @@ -179,9 +186,11 @@ fn Use() { // CHECK:STDOUT: %ptr.loc17_17: type = ptr_type %const.loc17_10 [concrete = constants.%ptr.cbd] // CHECK:STDOUT: } // CHECK:STDOUT: %b: %ptr.cbd = bind_name b, %.loc17_25.2 -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value constants.%X, (constants.%Destroy.impl_witness.7d5) [concrete = constants.%Destroy.facet.387] -// CHECK:STDOUT: %.loc14_3.2: %Destroy.type = converted constants.%X, %Destroy.facet [concrete = constants.%Destroy.facet.387] -// CHECK:STDOUT: %const.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%const.as.Destroy.impl.Op.60f +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc14_3.2: %type_where = converted constants.%X, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value constants.%X, (constants.%Destroy.impl_witness.079) [concrete = constants.%Destroy.facet.074] +// CHECK:STDOUT: %.loc14_3.3: %Destroy.type = converted constants.%X, %Destroy.facet [concrete = constants.%Destroy.facet.074] +// CHECK:STDOUT: %const.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%const.as.Destroy.impl.Op.3cc // CHECK:STDOUT: // CHECK:STDOUT: %bound_method: = bound_method %i.var, %const.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc14: %ptr.cbd = addr_of %i.var @@ -198,14 +207,16 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %const.dde: type = const_type %X [concrete] // CHECK:STDOUT: %Init.type: type = fn_type @Init [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Init: %Init.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %X, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.177: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -219,8 +230,8 @@ fn Use() { // 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] -// CHECK:STDOUT: %.loc12_3: ref %X = splice_block %i.var {} -// CHECK:STDOUT: %Init.call: init %const.dde = call %Init.ref() to %.loc12_3 +// CHECK:STDOUT: %.loc12_3.1: ref %X = splice_block %i.var {} +// CHECK:STDOUT: %Init.call: init %const.dde = call %Init.ref() to %.loc12_3.1 // CHECK:STDOUT: %X.ref.loc12_24: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %.loc12_21.1: init %X = as_compatible %Init.call // CHECK:STDOUT: %.loc12_21.2: init %X = converted %Init.call, %.loc12_21.1 @@ -236,9 +247,13 @@ fn Use() { // CHECK:STDOUT: %.loc13_20.2: %X = converted %value.ref, %.loc13_20.1 // CHECK:STDOUT: %X.ref.loc13_10: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %v: %X = bind_name v, %.loc13_20.2 -// CHECK:STDOUT: %X.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%X.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc12_3.2: %type_where = converted constants.%X, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.177 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method: = bound_method %i.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.d17 = addr_of %i.var -// CHECK:STDOUT: %X.as.Destroy.impl.Op.call: init %empty_tuple.type = call %X.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -251,10 +266,10 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] // CHECK:STDOUT: %const: type = const_type %X [concrete] // CHECK:STDOUT: %ptr.cbd: type = ptr_type %const [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] +// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] // CHECK:STDOUT: %reference.var: ref %X = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.373: %ptr.d17 = addr_of %reference.var [concrete] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/as/maybe_unformed.carbon b/toolchain/check/testdata/as/maybe_unformed.carbon index 64389dfe1d13..0681a2a6c93a 100644 --- a/toolchain/check/testdata/as/maybe_unformed.carbon +++ b/toolchain/check/testdata/as/maybe_unformed.carbon @@ -137,7 +137,6 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] // CHECK:STDOUT: %MaybeUnformed.type: type = generic_class_type @MaybeUnformed [concrete] // CHECK:STDOUT: %MaybeUnformed.generic: %MaybeUnformed.type = struct_value () [concrete] @@ -150,12 +149,10 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .MaybeUnformed = %Core.MaybeUnformed // 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.MaybeUnformed: %MaybeUnformed.type = import_ref Core//prelude/parts/maybe_unformed, MaybeUnformed, loaded [concrete = constants.%MaybeUnformed.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -211,9 +208,8 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Init.type: type = fn_type @Init [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Init: %Init.type = struct_value () [concrete] // CHECK:STDOUT: %MaybeUnformed.type: type = generic_class_type @MaybeUnformed [concrete] // CHECK:STDOUT: %MaybeUnformed.generic: %MaybeUnformed.type = struct_value () [concrete] @@ -221,22 +217,25 @@ fn Use() { // CHECK:STDOUT: %pattern_type.eb8: type = pattern_type %MaybeUnformed.275 [concrete] // CHECK:STDOUT: %As.type.90f: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.90f = struct_value () [concrete] -// CHECK:STDOUT: %MaybeUnformed.as.Destroy.impl.Op.type.fc3: type = fn_type @MaybeUnformed.as.Destroy.impl.Op, @MaybeUnformed.as.Destroy.impl(%X) [concrete] -// CHECK:STDOUT: %MaybeUnformed.as.Destroy.impl.Op.eef: %MaybeUnformed.as.Destroy.impl.Op.type.fc3 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %MaybeUnformed.275, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.354: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bae: %AggregateT.as_type.as.Destroy.impl.Op.type.354 = struct_value () [concrete] // CHECK:STDOUT: %ptr.58e: type = ptr_type %MaybeUnformed.275 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .MaybeUnformed = %Core.MaybeUnformed // CHECK:STDOUT: .As = %Core.As +// 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.MaybeUnformed: %MaybeUnformed.type = import_ref Core//prelude/parts/maybe_unformed, MaybeUnformed, loaded [concrete = constants.%MaybeUnformed.generic] // CHECK:STDOUT: %Core.As: %As.type.90f = import_ref Core//prelude/parts/as, As, loaded [concrete = constants.%As.generic] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Use() { @@ -278,11 +277,13 @@ fn Use() { // CHECK:STDOUT: %MaybeUnformed.loc27_30: type = class_type @MaybeUnformed, @MaybeUnformed(constants.%X) [concrete = constants.%MaybeUnformed.275] // CHECK:STDOUT: } // CHECK:STDOUT: %v: %MaybeUnformed.275 = bind_name v, [concrete = ] -// CHECK:STDOUT: %MaybeUnformed.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%MaybeUnformed.as.Destroy.impl.Op.eef +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%MaybeUnformed.275, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc19_3: %type_where = converted constants.%MaybeUnformed.275, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bae // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method: = bound_method %i.var, %MaybeUnformed.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method: = bound_method %i.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.58e = addr_of %i.var -// CHECK:STDOUT: %MaybeUnformed.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -295,11 +296,11 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] // CHECK:STDOUT: %MaybeUnformed.275: type = class_type @MaybeUnformed, @MaybeUnformed(%X) [concrete] // CHECK:STDOUT: %ptr.58e: type = ptr_type %MaybeUnformed.275 [concrete] // CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] +// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] // CHECK:STDOUT: %reference.var: ref %X = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.a46: %ptr.d17 = addr_of %reference.var [concrete] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/as/partial.carbon b/toolchain/check/testdata/as/partial.carbon index bc21920f4ee0..765cabdbca58 100644 --- a/toolchain/check/testdata/as/partial.carbon +++ b/toolchain/check/testdata/as/partial.carbon @@ -136,9 +136,9 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] // CHECK:STDOUT: %Init.type: type = fn_type @Init [concrete] // CHECK:STDOUT: %Init: %Init.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] // CHECK:STDOUT: %.e71: type = partial_type %X [concrete] // CHECK:STDOUT: %pattern_type.a53: type = pattern_type %.e71 [concrete] // CHECK:STDOUT: %ptr.7b2: type = ptr_type %.e71 [concrete] @@ -225,14 +225,16 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %.e71: type = partial_type %X [concrete] // CHECK:STDOUT: %Init.type: type = fn_type @Init [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Init: %Init.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %X, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.177: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -248,7 +250,7 @@ fn Use() { // CHECK:STDOUT: %Init.ref.loc18: %Init.type = name_ref Init, file.%Init.decl [concrete = constants.%Init] // CHECK:STDOUT: %.loc18_19: ref %.e71 = temporary_storage // CHECK:STDOUT: %Init.call.loc18: init %.e71 = call %Init.ref.loc18() to %.loc18_19 -// CHECK:STDOUT: %.loc18_3: %X = converted %Init.call.loc18, [concrete = ] +// CHECK:STDOUT: %.loc18_3.1: %X = converted %Init.call.loc18, [concrete = ] // CHECK:STDOUT: assign %i.var, // CHECK:STDOUT: %X.ref.loc18: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %i: ref %X = bind_name i, %i.var @@ -278,15 +280,27 @@ fn Use() { // CHECK:STDOUT: assign %k.var, // CHECK:STDOUT: %X.ref.loc34_10: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %k: ref %X = bind_name k, %k.var -// CHECK:STDOUT: %X.as.Destroy.impl.Op.bound.loc34: = bound_method %k.var, constants.%X.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc34: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc34_3: %type_where = converted constants.%X, %facet_value.loc34 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc34: = bound_method %k.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.177 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc34: = bound_method %k.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc34: %ptr.d17 = addr_of %k.var -// CHECK:STDOUT: %X.as.Destroy.impl.Op.call.loc34: init %empty_tuple.type = call %X.as.Destroy.impl.Op.bound.loc34(%addr.loc34) -// CHECK:STDOUT: %X.as.Destroy.impl.Op.bound.loc26: = bound_method %j.var, constants.%X.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc34: init %empty_tuple.type = call %bound_method.loc34(%addr.loc34) +// CHECK:STDOUT: %facet_value.loc26: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc26_3: %type_where = converted constants.%X, %facet_value.loc26 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc26: = bound_method %j.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.177 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc26: = bound_method %j.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc26: %ptr.d17 = addr_of %j.var -// CHECK:STDOUT: %X.as.Destroy.impl.Op.call.loc26: init %empty_tuple.type = call %X.as.Destroy.impl.Op.bound.loc26(%addr.loc26) -// CHECK:STDOUT: %X.as.Destroy.impl.Op.bound.loc18: = bound_method %i.var, constants.%X.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc26: init %empty_tuple.type = call %bound_method.loc26(%addr.loc26) +// CHECK:STDOUT: %facet_value.loc18: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc18_3.2: %type_where = converted constants.%X, %facet_value.loc18 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc18: = bound_method %i.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.177 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc18: = bound_method %i.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc18: %ptr.d17 = addr_of %i.var -// CHECK:STDOUT: %X.as.Destroy.impl.Op.call.loc18: init %empty_tuple.type = call %X.as.Destroy.impl.Op.bound.loc18(%addr.loc18) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc18: init %empty_tuple.type = call %bound_method.loc18(%addr.loc18) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -294,11 +308,11 @@ fn Use() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] // CHECK:STDOUT: %.e71: type = partial_type %X [concrete] // CHECK:STDOUT: %ptr.7b2: type = ptr_type %.e71 [concrete] // CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] +// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] // CHECK:STDOUT: %reference.var: ref %X = var file.%reference.var_patt [concrete] // CHECK:STDOUT: %addr.c6b: %ptr.d17 = addr_of %reference.var [concrete] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon b/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon index 95ea2be5cdd4..9f65d3e7618f 100644 --- a/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon +++ b/toolchain/check/testdata/basics/dump_sem_ir_ranges.carbon @@ -176,17 +176,9 @@ library "[[@TEST_NAME]]"; // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %A.G.type: type = fn_type @A.G [concrete] // CHECK:STDOUT: %A.G: %A.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.I.type: type = fn_type @C.I [concrete] // CHECK:STDOUT: %C.I: %C.I.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -196,30 +188,6 @@ library "[[@TEST_NAME]]"; // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: // CHECK:STDOUT: %A.G.decl: %A.G.type = fn_decl @A.G [concrete = constants.%A.G] {} {} @@ -235,11 +203,6 @@ library "[[@TEST_NAME]]"; // CHECK:STDOUT: class @C { // CHECK:STDOUT: %C.I.decl: %C.I.type = fn_decl @C.I [concrete = constants.%C.I] {} {} // CHECK:STDOUT: -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] -// CHECK:STDOUT: // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -250,12 +213,8 @@ library "[[@TEST_NAME]]"; // CHECK:STDOUT: // CHECK:STDOUT: fn @A.G(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.I(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- call_params.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/basics/include_in_dumps.carbon b/toolchain/check/testdata/basics/include_in_dumps.carbon index fa32f5f18c0e..c7ec747210ff 100644 --- a/toolchain/check/testdata/basics/include_in_dumps.carbon +++ b/toolchain/check/testdata/basics/include_in_dumps.carbon @@ -114,9 +114,9 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %Self.as_type.a67: type = facet_access_type %Self.7ee [symbolic] -// CHECK:STDOUT: %pattern_type.d22: type = pattern_type %Self.as_type.a67 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.d22: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %I.Op.type: type = fn_type @I.Op [concrete] // CHECK:STDOUT: %I.Op: %I.Op.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -140,13 +140,13 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: %self.patt: @I.Op.%pattern_type (%pattern_type.d22) = binding_pattern self [concrete] // CHECK:STDOUT: %self.param_patt: @I.Op.%pattern_type (%pattern_type.d22) = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @I.Op.%Self.as_type.loc8_15.1 (%Self.as_type.a67) = value_param call_param0 -// CHECK:STDOUT: %.loc8_15.1: type = splice_block %.loc8_15.2 [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type.a67)] { -// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %Self.as_type.loc8_15.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type.a67)] -// CHECK:STDOUT: %.loc8_15.2: type = converted %Self.ref, %Self.as_type.loc8_15.2 [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type.a67)] +// CHECK:STDOUT: %self.param: @I.Op.%Self.as_type.loc8_15.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc8_15.1: type = splice_block %.loc8_15.2 [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type)] { +// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc8_15.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc8_15.2: type = converted %Self.ref, %Self.as_type.loc8_15.2 [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @I.Op.%Self.as_type.loc8_15.1 (%Self.as_type.a67) = bind_name self, %self.param +// CHECK:STDOUT: %self: @I.Op.%Self.as_type.loc8_15.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.Op.decl [concrete = constants.%assoc0] // CHECK:STDOUT: @@ -157,16 +157,16 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.Op(@I.%Self: %I.type) { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %Self.as_type.loc8_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type.a67)] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc8_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc8_15.1 [symbolic = %pattern_type (constants.%pattern_type.d22)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @I.Op.%Self.as_type.loc8_15.1 (%Self.as_type.a67)); +// CHECK:STDOUT: fn(%self.param: @I.Op.%Self.as_type.loc8_15.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @I.Op(constants.%Self.7ee) { -// CHECK:STDOUT: %Self => constants.%Self.7ee -// CHECK:STDOUT: %Self.as_type.loc8_15.1 => constants.%Self.as_type.a67 +// CHECK:STDOUT: specific @I.Op(constants.%Self) { +// CHECK:STDOUT: %Self => constants.%Self +// CHECK:STDOUT: %Self.as_type.loc8_15.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d22 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/access_modifers.carbon b/toolchain/check/testdata/class/access_modifers.carbon index 2867959486a6..4d4538d1bce6 100644 --- a/toolchain/check/testdata/class/access_modifers.carbon +++ b/toolchain/check/testdata/class/access_modifers.carbon @@ -183,13 +183,6 @@ class A { // CHECK:STDOUT: %pattern_type.ce2: type = pattern_type %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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7a7: = impl_witness @Circle.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.54d: type = ptr_type %Circle [concrete] -// CHECK:STDOUT: %pattern_type.f32: type = pattern_type %ptr.54d [concrete] -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op.type: type = fn_type @Circle.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op: %Circle.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.radius.251: type = struct_type {.radius: %i32} [concrete] // CHECK:STDOUT: %complete_type.5a5: = complete_type_witness %struct_type.radius.251 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -200,6 +193,13 @@ class A { // CHECK:STDOUT: %Circle.val: %Circle = struct_value (%int_5.0f6) [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Circle, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.25b: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.031: %AggregateT.as_type.as.Destroy.impl.Op.type.25b = struct_value () [concrete] +// CHECK:STDOUT: %ptr.54d: type = ptr_type %Circle [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.031, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -228,22 +228,6 @@ class A { // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Circle.as.Destroy.impl: @Circle.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op.decl: %Circle.as.Destroy.impl.Op.type = fn_decl @Circle.as.Destroy.impl.Op [concrete = constants.%Circle.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f32 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f32 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.54d = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle] -// CHECK:STDOUT: %self: %ptr.54d = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Circle.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Circle.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Circle { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -281,10 +265,6 @@ class A { // CHECK:STDOUT: %return.param: ref %Circle = out_param call_param0 // CHECK:STDOUT: %return: ref %Circle = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle] -// CHECK:STDOUT: impl_decl @Circle.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Circle.as.Destroy.impl.%Circle.as.Destroy.impl.Op.decl), @Circle.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.7a7] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.radius.251 [concrete = constants.%complete_type.5a5] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -325,8 +305,6 @@ class A { // CHECK:STDOUT: return %.loc13_25 to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Circle.as.Destroy.impl.Op(%self.param: %ptr.54d) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -358,9 +336,13 @@ class A { // CHECK:STDOUT: %SOME_INTERNAL_CONSTANT.ref: = name_ref SOME_INTERNAL_CONSTANT, [concrete = ] // CHECK:STDOUT: %circle.ref.loc51: %Circle = name_ref circle, %circle // CHECK:STDOUT: %SomeInternalFunction.ref: = name_ref SomeInternalFunction, [concrete = ] -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op.bound: = bound_method %.loc18_36.2, constants.%Circle.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Circle, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc18_36.4: %type_where = converted constants.%Circle, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc18_36.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.031 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.031, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc18_36.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.54d = addr_of %.loc18_36.2 -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Circle.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -373,13 +355,6 @@ class A { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] @@ -390,12 +365,10 @@ class A { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -409,30 +382,10 @@ class A { // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -441,8 +394,6 @@ class A { // CHECK:STDOUT: .x [protected] = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -476,13 +427,6 @@ class A { // CHECK:STDOUT: %Circle.SomeInternalFunction: %Circle.SomeInternalFunction.type = struct_value () [concrete] // CHECK:STDOUT: %Circle.Compute.type: type = fn_type @Circle.Compute [concrete] // CHECK:STDOUT: %Circle.Compute: %Circle.Compute.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Circle.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.54d: type = ptr_type %Circle [concrete] -// CHECK:STDOUT: %pattern_type.f32: type = pattern_type %ptr.54d [concrete] -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op.type: type = fn_type @Circle.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op: %Circle.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.radius: type = struct_type {.radius: %i32} [concrete] // CHECK:STDOUT: %complete_type.5a5: = complete_type_witness %struct_type.radius [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -517,14 +461,12 @@ class A { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -542,22 +484,6 @@ class A { // CHECK:STDOUT: %Circle.decl: type = class_decl @Circle [concrete = constants.%Circle] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Circle.as.Destroy.impl: @Circle.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op.decl: %Circle.as.Destroy.impl.Op.type = fn_decl @Circle.as.Destroy.impl.Op [concrete = constants.%Circle.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f32 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f32 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.54d = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle] -// CHECK:STDOUT: %self: %ptr.54d = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Circle.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Circle.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Circle { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -599,10 +525,6 @@ class A { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param1 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle] -// CHECK:STDOUT: impl_decl @Circle.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Circle.as.Destroy.impl.%Circle.as.Destroy.impl.Op.decl), @Circle.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.radius [concrete = constants.%complete_type.5a5] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -648,8 +570,6 @@ class A { // CHECK:STDOUT: return %Circle.SomeInternalFunction.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Circle.as.Destroy.impl.Op(%self.param: %ptr.54d) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- public_global_access.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -676,13 +596,6 @@ class A { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0, @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.0f6: %i32 = int_value 5 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: } @@ -691,7 +604,6 @@ class A { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -699,7 +611,6 @@ class A { // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -720,22 +631,6 @@ class A { // CHECK:STDOUT: %x: %i32 = bind_name x, @__global_init.%x.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x [concrete] @@ -753,10 +648,6 @@ class A { // CHECK:STDOUT: %.loc5_16.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %.loc5_16.2: %i32 = converted %int_5, %.loc5_16.1 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %x: %i32 = bind_name x, %.loc5_16.2 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -765,8 +656,6 @@ class A { // CHECK:STDOUT: .x = %x // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -800,13 +689,6 @@ class A { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0, @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.0f6: %i32 = int_value 5 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: } @@ -815,7 +697,6 @@ class A { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -823,7 +704,6 @@ class A { // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -853,22 +733,6 @@ class A { // CHECK:STDOUT: %y: %i32 = bind_name y, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x [concrete] @@ -902,10 +766,6 @@ class A { // CHECK:STDOUT: %.loc6_24.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc6 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %.loc6_24.2: %i32 = converted %int_5.loc6, %.loc6_24.1 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %y: %i32 = bind_name y, %.loc6_24.2 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -915,8 +775,6 @@ class A { // CHECK:STDOUT: .y [private] = %y // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %A.ref.loc16: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -935,24 +793,15 @@ class A { // CHECK:STDOUT: %A.F: %A.F.type = struct_value () [concrete] // CHECK:STDOUT: %A.G.type: type = fn_type @A.G [concrete] // CHECK:STDOUT: %A.G: %A.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -964,29 +813,9 @@ class A { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %A.F.decl: %A.F.type = fn_decl @A.F [concrete = constants.%A.F] {} {} // CHECK:STDOUT: %A.G.decl: %A.G.type = fn_decl @A.G [concrete = constants.%A.G] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1009,5 +838,3 @@ class A { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/adapter/adapt.carbon b/toolchain/check/testdata/class/adapter/adapt.carbon index a57daa4896c8..a37624d8c7eb 100644 --- a/toolchain/check/testdata/class/adapter/adapt.carbon +++ b/toolchain/check/testdata/class/adapter/adapt.carbon @@ -77,38 +77,19 @@ interface I { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %SomeClass.elem: type = unbound_element_type %SomeClass, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.25c: = impl_witness @SomeClass.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.c8a: type = ptr_type %SomeClass [concrete] -// CHECK:STDOUT: %pattern_type.a47: type = pattern_type %ptr.c8a [concrete] -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op.type: type = fn_type @SomeClass.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op: %SomeClass.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b [concrete] // CHECK:STDOUT: %SomeClassAdapter: type = class_type @SomeClassAdapter [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.021: = impl_witness @SomeClassAdapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.b51: type = ptr_type %SomeClassAdapter [concrete] -// CHECK:STDOUT: %pattern_type.76d: type = pattern_type %ptr.b51 [concrete] -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op.type: type = fn_type @SomeClassAdapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op: %SomeClassAdapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %StructAdapter: type = class_type @StructAdapter [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c89: = impl_witness @StructAdapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.670: type = ptr_type %StructAdapter [concrete] -// CHECK:STDOUT: %pattern_type.671: type = pattern_type %ptr.670 [concrete] -// CHECK:STDOUT: %StructAdapter.as.Destroy.impl.Op.type: type = fn_type @StructAdapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %StructAdapter.as.Destroy.impl.Op: %StructAdapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -124,54 +105,6 @@ interface I { // CHECK:STDOUT: %StructAdapter.decl: type = class_decl @StructAdapter [concrete = constants.%StructAdapter] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @SomeClass.as.Destroy.impl: @SomeClass.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op.decl: %SomeClass.as.Destroy.impl.Op.type = fn_decl @SomeClass.as.Destroy.impl.Op [concrete = constants.%SomeClass.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a47 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a47 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.c8a = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] -// CHECK:STDOUT: %self: %ptr.c8a = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SomeClass.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SomeClass.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @SomeClassAdapter.as.Destroy.impl: @SomeClassAdapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op.decl: %SomeClassAdapter.as.Destroy.impl.Op.type = fn_decl @SomeClassAdapter.as.Destroy.impl.Op [concrete = constants.%SomeClassAdapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.76d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.76d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.b51 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClassAdapter [concrete = constants.%SomeClassAdapter] -// CHECK:STDOUT: %self: %ptr.b51 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SomeClassAdapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SomeClassAdapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @StructAdapter.as.Destroy.impl: @StructAdapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %StructAdapter.as.Destroy.impl.Op.decl: %StructAdapter.as.Destroy.impl.Op.type = fn_decl @StructAdapter.as.Destroy.impl.Op [concrete = constants.%StructAdapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.671 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.671 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.670 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%StructAdapter [concrete = constants.%StructAdapter] -// CHECK:STDOUT: %self: %ptr.670 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %StructAdapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @StructAdapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @SomeClass { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -179,10 +112,6 @@ interface I { // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: %SomeClass.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] -// CHECK:STDOUT: impl_decl @SomeClass.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SomeClass.as.Destroy.impl.%SomeClass.as.Destroy.impl.Op.decl), @SomeClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.25c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -195,10 +124,6 @@ interface I { // CHECK:STDOUT: class @SomeClassAdapter { // CHECK:STDOUT: %SomeClass.ref: type = name_ref SomeClass, file.%SomeClass.decl [concrete = constants.%SomeClass] // CHECK:STDOUT: adapt_decl %SomeClass.ref [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClassAdapter [concrete = constants.%SomeClassAdapter] -// CHECK:STDOUT: impl_decl @SomeClassAdapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SomeClassAdapter.as.Destroy.impl.%SomeClassAdapter.as.Destroy.impl.Op.decl), @SomeClassAdapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.021] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -214,10 +139,6 @@ interface I { // CHECK:STDOUT: %i32.loc14_23: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b] // CHECK:STDOUT: adapt_decl %struct_type.a.b [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%StructAdapter [concrete = constants.%StructAdapter] -// CHECK:STDOUT: impl_decl @StructAdapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@StructAdapter.as.Destroy.impl.%StructAdapter.as.Destroy.impl.Op.decl), @StructAdapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c89] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -225,45 +146,25 @@ interface I { // CHECK:STDOUT: .Self = constants.%StructAdapter // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @SomeClass.as.Destroy.impl.Op(%self.param: %ptr.c8a) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @SomeClassAdapter.as.Destroy.impl.Op(%self.param: %ptr.b51) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @StructAdapter.as.Destroy.impl.Op(%self.param: %ptr.670) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_not_extend.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Adapted: type = class_type @Adapted [concrete] // CHECK:STDOUT: %Adapted.F.type: type = fn_type @Adapted.F [concrete] // CHECK:STDOUT: %Adapted.F: %Adapted.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d63: = impl_witness @Adapted.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.08d: type = ptr_type %Adapted [concrete] -// CHECK:STDOUT: %pattern_type.c04: type = pattern_type %ptr.08d [concrete] -// CHECK:STDOUT: %Adapted.as.Destroy.impl.Op.type: type = fn_type @Adapted.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Adapted.as.Destroy.impl.Op: %Adapted.as.Destroy.impl.Op.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: %AdaptNotExtend: type = class_type @AdaptNotExtend [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d42: = impl_witness @AdaptNotExtend.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.ae9: type = ptr_type %AdaptNotExtend [concrete] -// CHECK:STDOUT: %pattern_type.73e: type = pattern_type %ptr.ae9 [concrete] -// CHECK:STDOUT: %AdaptNotExtend.as.Destroy.impl.Op.type: type = fn_type @AdaptNotExtend.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptNotExtend.as.Destroy.impl.Op: %AdaptNotExtend.as.Destroy.impl.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.893: type = pattern_type %AdaptNotExtend [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %AdaptNotExtend [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -277,8 +178,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.patt: %pattern_type.893 = binding_pattern a [concrete] -// CHECK:STDOUT: %a.param_patt: %pattern_type.893 = value_param_pattern %a.patt, call_param0 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 [concrete] // 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] @@ -286,44 +187,8 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Adapted.as.Destroy.impl: @Adapted.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Adapted.as.Destroy.impl.Op.decl: %Adapted.as.Destroy.impl.Op.type = fn_decl @Adapted.as.Destroy.impl.Op [concrete = constants.%Adapted.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.c04 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.c04 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.08d = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapted [concrete = constants.%Adapted] -// CHECK:STDOUT: %self: %ptr.08d = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Adapted.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Adapted.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptNotExtend.as.Destroy.impl: @AdaptNotExtend.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptNotExtend.as.Destroy.impl.Op.decl: %AdaptNotExtend.as.Destroy.impl.Op.type = fn_decl @AdaptNotExtend.as.Destroy.impl.Op [concrete = constants.%AdaptNotExtend.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.73e = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.73e = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.ae9 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptNotExtend [concrete = constants.%AdaptNotExtend] -// CHECK:STDOUT: %self: %ptr.ae9 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptNotExtend.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptNotExtend.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Adapted { // CHECK:STDOUT: %Adapted.F.decl: %Adapted.F.type = fn_decl @Adapted.F [concrete = constants.%Adapted.F] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapted [concrete = constants.%Adapted] -// CHECK:STDOUT: impl_decl @Adapted.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Adapted.as.Destroy.impl.%Adapted.as.Destroy.impl.Op.decl), @Adapted.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d63] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -335,10 +200,6 @@ interface I { // CHECK:STDOUT: class @AdaptNotExtend { // CHECK:STDOUT: %Adapted.ref: type = name_ref Adapted, file.%Adapted.decl [concrete = constants.%Adapted] // CHECK:STDOUT: adapt_decl %Adapted.ref [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptNotExtend [concrete = constants.%AdaptNotExtend] -// CHECK:STDOUT: impl_decl @AdaptNotExtend.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptNotExtend.as.Destroy.impl.%AdaptNotExtend.as.Destroy.impl.Op.decl), @AdaptNotExtend.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d42] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -350,10 +211,6 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: fn @Adapted.F(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Adapted.as.Destroy.impl.Op(%self.param: %ptr.08d) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptNotExtend.as.Destroy.impl.Op(%self.param: %ptr.ae9) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %AdaptNotExtend) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %AdaptNotExtend = name_ref a, %a diff --git a/toolchain/check/testdata/class/adapter/adapt_copy.carbon b/toolchain/check/testdata/class/adapter/adapt_copy.carbon index 3d54a5d53986..05cac20fa0fa 100644 --- a/toolchain/check/testdata/class/adapter/adapt_copy.carbon +++ b/toolchain/check/testdata/class/adapter/adapt_copy.carbon @@ -177,19 +177,18 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.777: = impl_witness @AdaptCopyable.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.4c1: type = ptr_type %AdaptCopyable [concrete] -// CHECK:STDOUT: %pattern_type.2d8: type = pattern_type %ptr.4c1 [concrete] -// CHECK:STDOUT: %AdaptCopyable.as.Destroy.impl.Op.type: type = fn_type @AdaptCopyable.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptCopyable.as.Destroy.impl.Op: %AdaptCopyable.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.cdf: type = pattern_type %AdaptCopyable [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] // CHECK:STDOUT: %Copy.Op.type: type = fn_type @Copy.Op [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.567: %type_where = facet_value %AdaptCopyable, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.2be: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.567) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.1b8: %AggregateT.as_type.as.Destroy.impl.Op.type.2be = struct_value () [concrete] +// CHECK:STDOUT: %ptr.4c1: type = ptr_type %AdaptCopyable [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.6d3: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.1b8, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.567) [concrete] // CHECK:STDOUT: %UInt.type: type = generic_class_type @UInt [concrete] // CHECK:STDOUT: %UInt.generic: %UInt.type = struct_value () [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] @@ -207,24 +206,24 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %u32, (%Copy.impl_witness.61c) [concrete] // CHECK:STDOUT: %.fbf: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %UInt.as.Copy.impl.Op.specific_fn: = specific_function %UInt.as.Copy.impl.Op.1bb, @UInt.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %facet_value: %type_where = facet_value %tuple.type.2a3, () [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.285: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %facet_value.6a4: %type_where = facet_value %tuple.type.2a3, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.285: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.6a4) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.8a01: %AggregateT.as_type.as.Destroy.impl.Op.type.285 = struct_value () [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.8a01, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.610: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.8a01, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.6a4) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .UInt = %Core.UInt // CHECK:STDOUT: import Core//prelude // 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: %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.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.UInt: %UInt.type = import_ref Core//prelude/parts/uint, UInt, loaded [concrete = constants.%UInt.generic] // CHECK:STDOUT: %Core.import_ref.ba6: @UInt.as.Copy.impl.%UInt.as.Copy.impl.Op.type (%UInt.as.Copy.impl.Op.type.cb3) = import_ref Core//prelude/parts/uint, loc17_31, loaded [symbolic = @UInt.as.Copy.impl.%UInt.as.Copy.impl.Op (constants.%UInt.as.Copy.impl.Op.ee7)] // CHECK:STDOUT: %Copy.impl_witness_table.46a = impl_witness_table (%Core.import_ref.ba6), @UInt.as.Copy.impl [concrete] @@ -277,30 +276,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptCopyable.as.Destroy.impl: @AdaptCopyable.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptCopyable.as.Destroy.impl.Op.decl: %AdaptCopyable.as.Destroy.impl.Op.type = fn_decl @AdaptCopyable.as.Destroy.impl.Op [concrete = constants.%AdaptCopyable.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.2d8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.2d8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.4c1 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptCopyable [concrete = constants.%AdaptCopyable] -// CHECK:STDOUT: %self: %ptr.4c1 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptCopyable.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptCopyable.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @AdaptCopyable { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: adapt_decl %i32 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptCopyable [concrete = constants.%AdaptCopyable] -// CHECK:STDOUT: impl_decl @AdaptCopyable.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptCopyable.as.Destroy.impl.%AdaptCopyable.as.Destroy.impl.Op.decl), @AdaptCopyable.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.777] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%i32.builtin [concrete = constants.%complete_type.f8a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -308,8 +287,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: .Self = constants.%AdaptCopyable // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptCopyable.as.Destroy.impl.Op(%self.param: %ptr.4c1) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param: %AdaptCopyable) -> %AdaptCopyable { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -323,9 +300,13 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %d: ref %AdaptCopyable = bind_name d, %d.var // CHECK:STDOUT: %d.ref: ref %AdaptCopyable = name_ref d, %d // CHECK:STDOUT: %.loc24: %AdaptCopyable = bind_value %d.ref -// CHECK:STDOUT: %AdaptCopyable.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%AdaptCopyable.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%AdaptCopyable, () [concrete = constants.%facet_value.567] +// CHECK:STDOUT: %.loc16: %type_where = converted constants.%AdaptCopyable, %facet_value [concrete = constants.%facet_value.567] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.1b8 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.1b8, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.567) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.6d3] +// CHECK:STDOUT: %bound_method: = bound_method %d.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.4c1 = addr_of %d.var -// CHECK:STDOUT: %AdaptCopyable.as.Destroy.impl.Op.call: init %empty_tuple.type = call %AdaptCopyable.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -375,10 +356,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %.loc43_10.4: init %u32 = initialize_from %UInt.as.Copy.impl.Op.call.loc43 to %tuple.elem1.loc43_10.2 // CHECK:STDOUT: %.loc43_10.5: init %tuple.type.2a3 = tuple_init (%.loc43_10.2, %.loc43_10.4) to %return // CHECK:STDOUT: %.loc43_11: init %tuple.type.2a3 = converted %d.ref, %.loc43_10.5 -// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.2a3, () [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc35_3.2: %type_where = converted constants.%tuple.type.2a3, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.2a3, () [concrete = constants.%facet_value.6a4] +// CHECK:STDOUT: %.loc35_3.2: %type_where = converted constants.%tuple.type.2a3, %facet_value [concrete = constants.%facet_value.6a4] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.8a01 -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.8a01, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.8a01, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.6a4) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.610] // CHECK:STDOUT: %bound_method.loc35_3: = bound_method %d.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.c30 = addr_of %d.var // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc35_3(%addr) @@ -397,13 +378,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.375: = impl_witness @AdaptTuple.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.ca3: type = ptr_type %AdaptTuple [concrete] -// CHECK:STDOUT: %pattern_type.0d9: type = pattern_type %ptr.ca3 [concrete] -// CHECK:STDOUT: %AdaptTuple.as.Destroy.impl.Op.type: type = fn_type @AdaptTuple.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptTuple.as.Destroy.impl.Op: %AdaptTuple.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.65d: = complete_type_witness %tuple.type.d07 [concrete] // CHECK:STDOUT: %pattern_type.562: type = pattern_type %AdaptTuple [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -418,7 +392,13 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Copy.facet.c49: %Copy.type = facet_value %i32, (%Copy.impl_witness.a32) [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.c49 [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.a7e: %type_where = facet_value %AdaptTuple, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.5a3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.a7e) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.002: %AggregateT.as_type.as.Destroy.impl.Op.type.5a3 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.ca3: type = ptr_type %AdaptTuple [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.83b: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.002, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.a7e) [concrete] // CHECK:STDOUT: %UInt.type: type = generic_class_type @UInt [concrete] // CHECK:STDOUT: %UInt.generic: %UInt.type = struct_value () [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] @@ -434,27 +414,27 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Copy.facet.9a3: %Copy.type = facet_value %u32, (%Copy.impl_witness.61c) [concrete] // CHECK:STDOUT: %.fbf: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.9a3 [concrete] // CHECK:STDOUT: %UInt.as.Copy.impl.Op.specific_fn: = specific_function %UInt.as.Copy.impl.Op.1bb, @UInt.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %facet_value: %type_where = facet_value %tuple.type.f69, () [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.3a4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %facet_value.262: %type_where = facet_value %tuple.type.f69, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.3a4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.262) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.030: %AggregateT.as_type.as.Destroy.impl.Op.type.3a4 = struct_value () [concrete] // CHECK:STDOUT: %ptr.ed5: type = ptr_type %tuple.type.f69 [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.030, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.554: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.030, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.262) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .UInt = %Core.UInt // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.UInt: %UInt.type = import_ref Core//prelude/parts/uint, UInt, loaded [concrete = constants.%UInt.generic] // CHECK:STDOUT: %Core.import_ref.ba6: @UInt.as.Copy.impl.%UInt.as.Copy.impl.Op.type (%UInt.as.Copy.impl.Op.type.cb3) = import_ref Core//prelude/parts/uint, loc17_31, loaded [symbolic = @UInt.as.Copy.impl.%UInt.as.Copy.impl.Op (constants.%UInt.as.Copy.impl.Op.ee7)] // CHECK:STDOUT: %Copy.impl_witness_table.46a = impl_witness_table (%Core.import_ref.ba6), @UInt.as.Copy.impl [concrete] @@ -507,22 +487,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptTuple.as.Destroy.impl: @AdaptTuple.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptTuple.as.Destroy.impl.Op.decl: %AdaptTuple.as.Destroy.impl.Op.type = fn_decl @AdaptTuple.as.Destroy.impl.Op [concrete = constants.%AdaptTuple.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.0d9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.0d9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.ca3 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptTuple [concrete = constants.%AdaptTuple] -// CHECK:STDOUT: %self: %ptr.ca3 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptTuple.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptTuple.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @AdaptTuple { // CHECK:STDOUT: %int_32.loc5_10: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5_10: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -531,10 +495,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %.loc5_18: %tuple.type.24b = tuple_literal (%i32.loc5_10, %i32.loc5_15) // CHECK:STDOUT: %.loc5_19: type = converted %.loc5_18, constants.%tuple.type.d07 [concrete = constants.%tuple.type.d07] // CHECK:STDOUT: adapt_decl %.loc5_19 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptTuple [concrete = constants.%AdaptTuple] -// CHECK:STDOUT: impl_decl @AdaptTuple.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptTuple.as.Destroy.impl.%AdaptTuple.as.Destroy.impl.Op.decl), @AdaptTuple.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.375] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%tuple.type.d07 [concrete = constants.%complete_type.65d] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -542,8 +502,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: .Self = constants.%AdaptTuple // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptTuple.as.Destroy.impl.Op(%self.param: %ptr.ca3) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param: %AdaptTuple) -> %return.param: %AdaptTuple { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -600,9 +558,13 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %.loc10_11.7: init %tuple.type.d07 = tuple_init (%.loc10_11.4, %.loc10_11.6) to %.loc10_11.3 // CHECK:STDOUT: %.loc10_11.8: init %AdaptTuple = as_compatible %.loc10_11.7 // CHECK:STDOUT: %.loc10_11.9: init %AdaptTuple = converted %d.ref, %.loc10_11.8 -// CHECK:STDOUT: %AdaptTuple.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%AdaptTuple.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%AdaptTuple, () [concrete = constants.%facet_value.a7e] +// CHECK:STDOUT: %.loc9_3.8: %type_where = converted constants.%AdaptTuple, %facet_value [concrete = constants.%facet_value.a7e] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.002 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.002, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.a7e) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.83b] +// CHECK:STDOUT: %bound_method.loc9_3.5: = bound_method %d.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.ca3 = addr_of %d.var -// CHECK:STDOUT: %AdaptTuple.as.Destroy.impl.Op.call: init %empty_tuple.type = call %AdaptTuple.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc9_3.5(%addr) // CHECK:STDOUT: return %.loc10_11.9 to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -693,10 +655,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %.loc15_10.11: init %u32 = initialize_from %UInt.as.Copy.impl.Op.call.loc15 to %tuple.elem1.loc15_10.4 // CHECK:STDOUT: %.loc15_10.12: init %tuple.type.f69 = tuple_init (%.loc15_10.9, %.loc15_10.11) to %return // CHECK:STDOUT: %.loc15_11: init %tuple.type.f69 = converted %d.ref, %.loc15_10.12 -// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.f69, () [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc14_3.2: %type_where = converted constants.%tuple.type.f69, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.f69, () [concrete = constants.%facet_value.262] +// CHECK:STDOUT: %.loc14_3.2: %type_where = converted constants.%tuple.type.f69, %facet_value [concrete = constants.%facet_value.262] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.030 -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.030, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.030, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.262) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.554] // CHECK:STDOUT: %bound_method.loc14_3: = bound_method %d.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.ed5 = addr_of %d.var // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc14_3(%addr) @@ -707,37 +669,32 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Noncopyable: type = class_type @Noncopyable [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.517: = impl_witness @Noncopyable.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6f4: type = ptr_type %Noncopyable [concrete] -// CHECK:STDOUT: %pattern_type.e38: type = pattern_type %ptr.6f4 [concrete] -// CHECK:STDOUT: %Noncopyable.as.Destroy.impl.Op.type: type = fn_type @Noncopyable.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Noncopyable.as.Destroy.impl.Op: %Noncopyable.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %AdaptNoncopyable: type = class_type @AdaptNoncopyable [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.aa8: = impl_witness @AdaptNoncopyable.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.ed9: type = ptr_type %AdaptNoncopyable [concrete] -// CHECK:STDOUT: %pattern_type.ea1: type = pattern_type %ptr.ed9 [concrete] -// CHECK:STDOUT: %AdaptNoncopyable.as.Destroy.impl.Op.type: type = fn_type @AdaptNoncopyable.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptNoncopyable.as.Destroy.impl.Op: %AdaptNoncopyable.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %AdaptNoncopyable [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %AdaptNoncopyable, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.3de: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.6f7: %AggregateT.as_type.as.Destroy.impl.Op.type.3de = struct_value () [concrete] +// CHECK:STDOUT: %ptr.ed9: type = ptr_type %AdaptNoncopyable [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.6f7, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [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.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -765,44 +722,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Noncopyable.as.Destroy.impl: @Noncopyable.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Noncopyable.as.Destroy.impl.Op.decl: %Noncopyable.as.Destroy.impl.Op.type = fn_decl @Noncopyable.as.Destroy.impl.Op [concrete = constants.%Noncopyable.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.e38 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.e38 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6f4 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Noncopyable [concrete = constants.%Noncopyable] -// CHECK:STDOUT: %self: %ptr.6f4 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Noncopyable.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Noncopyable.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptNoncopyable.as.Destroy.impl: @AdaptNoncopyable.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptNoncopyable.as.Destroy.impl.Op.decl: %AdaptNoncopyable.as.Destroy.impl.Op.type = fn_decl @AdaptNoncopyable.as.Destroy.impl.Op [concrete = constants.%AdaptNoncopyable.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.ea1 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.ea1 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.ed9 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptNoncopyable [concrete = constants.%AdaptNoncopyable] -// CHECK:STDOUT: %self: %ptr.ed9 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptNoncopyable.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptNoncopyable.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Noncopyable { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Noncopyable [concrete = constants.%Noncopyable] -// CHECK:STDOUT: impl_decl @Noncopyable.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Noncopyable.as.Destroy.impl.%Noncopyable.as.Destroy.impl.Op.decl), @Noncopyable.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.517] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -812,11 +733,7 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: class @AdaptNoncopyable { // CHECK:STDOUT: %Noncopyable.ref: type = name_ref Noncopyable, file.%Noncopyable.decl [concrete = constants.%Noncopyable] // CHECK:STDOUT: adapt_decl %Noncopyable.ref [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptNoncopyable [concrete = constants.%AdaptNoncopyable] -// CHECK:STDOUT: impl_decl @AdaptNoncopyable.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptNoncopyable.as.Destroy.impl.%AdaptNoncopyable.as.Destroy.impl.Op.decl), @AdaptNoncopyable.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.aa8] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -824,10 +741,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: .Noncopyable = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Noncopyable.as.Destroy.impl.Op(%self.param: %ptr.6f4) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptNoncopyable.as.Destroy.impl.Op(%self.param: %ptr.ed9) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @G(%a.param: %AdaptNoncopyable) -> %return.param: %AdaptNoncopyable { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -841,9 +754,13 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %b: ref %AdaptNoncopyable = bind_name b, %b.var // CHECK:STDOUT: %b.ref: ref %AdaptNoncopyable = name_ref b, %b // CHECK:STDOUT: %.loc28: %AdaptNoncopyable = bind_value %b.ref -// CHECK:STDOUT: %AdaptNoncopyable.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%AdaptNoncopyable.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%AdaptNoncopyable, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc20: %type_where = converted constants.%AdaptNoncopyable, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.6f7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.6f7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.ed9 = addr_of %b.var -// CHECK:STDOUT: %AdaptNoncopyable.as.Destroy.impl.Op.call: init %empty_tuple.type = call %AdaptNoncopyable.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -851,29 +768,17 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Noncopyable: type = class_type @Noncopyable [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.517: = impl_witness @Noncopyable.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6f4: type = ptr_type %Noncopyable [concrete] -// CHECK:STDOUT: %pattern_type.e38: type = pattern_type %ptr.6f4 [concrete] -// CHECK:STDOUT: %Noncopyable.as.Destroy.impl.Op.type: type = fn_type @Noncopyable.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Noncopyable.as.Destroy.impl.Op: %Noncopyable.as.Destroy.impl.Op.type = 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: %AdaptNoncopyableIndirect: type = class_type @AdaptNoncopyableIndirect [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] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.c9a: type = tuple_type (%i32, %Noncopyable, %i32) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.834: = impl_witness @AdaptNoncopyableIndirect.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.921: type = ptr_type %AdaptNoncopyableIndirect [concrete] -// CHECK:STDOUT: %pattern_type.969: type = pattern_type %ptr.921 [concrete] -// CHECK:STDOUT: %AdaptNoncopyableIndirect.as.Destroy.impl.Op.type: type = fn_type @AdaptNoncopyableIndirect.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptNoncopyableIndirect.as.Destroy.impl.Op: %AdaptNoncopyableIndirect.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.201: = complete_type_witness %tuple.type.c9a [concrete] // CHECK:STDOUT: %pattern_type.7e5: type = pattern_type %AdaptNoncopyableIndirect [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] @@ -888,21 +793,28 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %i32, (%Copy.impl_witness.a32) [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %AdaptNoncopyableIndirect, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.26a: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.02b: %AggregateT.as_type.as.Destroy.impl.Op.type.26a = struct_value () [concrete] +// CHECK:STDOUT: %ptr.921: type = ptr_type %AdaptNoncopyableIndirect [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.02b, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -930,43 +842,7 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Noncopyable.as.Destroy.impl: @Noncopyable.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Noncopyable.as.Destroy.impl.Op.decl: %Noncopyable.as.Destroy.impl.Op.type = fn_decl @Noncopyable.as.Destroy.impl.Op [concrete = constants.%Noncopyable.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.e38 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.e38 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6f4 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Noncopyable [concrete = constants.%Noncopyable] -// CHECK:STDOUT: %self: %ptr.6f4 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Noncopyable.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Noncopyable.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptNoncopyableIndirect.as.Destroy.impl: @AdaptNoncopyableIndirect.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptNoncopyableIndirect.as.Destroy.impl.Op.decl: %AdaptNoncopyableIndirect.as.Destroy.impl.Op.type = fn_decl @AdaptNoncopyableIndirect.as.Destroy.impl.Op [concrete = constants.%AdaptNoncopyableIndirect.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.969 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.969 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.921 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptNoncopyableIndirect [concrete = constants.%AdaptNoncopyableIndirect] -// CHECK:STDOUT: %self: %ptr.921 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptNoncopyableIndirect.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptNoncopyableIndirect.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Noncopyable { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Noncopyable [concrete = constants.%Noncopyable] -// CHECK:STDOUT: impl_decl @Noncopyable.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Noncopyable.as.Destroy.impl.%Noncopyable.as.Destroy.impl.Op.decl), @Noncopyable.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.517] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -983,10 +859,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %.loc9_31: %tuple.type.ff9 = tuple_literal (%i32.loc9_10, %Noncopyable.ref, %i32.loc9_28) // CHECK:STDOUT: %.loc9_32: type = converted %.loc9_31, constants.%tuple.type.c9a [concrete = constants.%tuple.type.c9a] // CHECK:STDOUT: adapt_decl %.loc9_32 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptNoncopyableIndirect [concrete = constants.%AdaptNoncopyableIndirect] -// CHECK:STDOUT: impl_decl @AdaptNoncopyableIndirect.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptNoncopyableIndirect.as.Destroy.impl.%AdaptNoncopyableIndirect.as.Destroy.impl.Op.decl), @AdaptNoncopyableIndirect.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.834] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%tuple.type.c9a [concrete = constants.%complete_type.201] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -995,10 +867,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: .Noncopyable = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Noncopyable.as.Destroy.impl.Op(%self.param: %ptr.6f4) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptNoncopyableIndirect.as.Destroy.impl.Op(%self.param: %ptr.921) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @H(%a.param: %AdaptNoncopyableIndirect) -> %return.param: %AdaptNoncopyableIndirect { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -1035,9 +903,13 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %.loc34_11.4: init %i32 = initialize_from %Int.as.Copy.impl.Op.call.loc34 to %tuple.elem0.loc34_11.2 // CHECK:STDOUT: %tuple.elem1.loc34: ref %Noncopyable = tuple_access %.loc34_11.1, element1 // CHECK:STDOUT: %.loc34_11.5: %Noncopyable = bind_value %tuple.elem1.loc34 -// CHECK:STDOUT: %AdaptNoncopyableIndirect.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%AdaptNoncopyableIndirect.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%AdaptNoncopyableIndirect, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc23_3.4: %type_where = converted constants.%AdaptNoncopyableIndirect, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.02b +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.02b, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc23_3.3: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.921 = addr_of %b.var -// CHECK:STDOUT: %AdaptNoncopyableIndirect.as.Destroy.impl.Op.call: init %empty_tuple.type = call %AdaptNoncopyableIndirect.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc23_3.3(%addr) // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1052,13 +924,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.e.f: type = struct_type {.e: %i32, .f: %i32} [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.3e2: = impl_witness @AdaptStruct.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e10: type = ptr_type %AdaptStruct [concrete] -// CHECK:STDOUT: %pattern_type.a0a: type = pattern_type %ptr.e10 [concrete] -// CHECK:STDOUT: %AdaptStruct.as.Destroy.impl.Op.type: type = fn_type @AdaptStruct.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptStruct.as.Destroy.impl.Op: %AdaptStruct.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.511: = complete_type_witness %struct_type.e.f [concrete] // CHECK:STDOUT: %pattern_type.f45: type = pattern_type %AdaptStruct [concrete] // CHECK:STDOUT: %I.type: type = fn_type @I [concrete] @@ -1073,7 +938,13 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Copy.facet.c49: %Copy.type = facet_value %i32, (%Copy.impl_witness.a32) [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.c49 [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.14c: %type_where = facet_value %AdaptStruct, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.b5b: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.14c) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.987: %AggregateT.as_type.as.Destroy.impl.Op.type.b5b = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e10: type = ptr_type %AdaptStruct [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4f8: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.987, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.14c) [concrete] // CHECK:STDOUT: %UInt.type: type = generic_class_type @UInt [concrete] // CHECK:STDOUT: %UInt.generic: %UInt.type = struct_value () [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] @@ -1090,27 +961,27 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Copy.facet.9a3: %Copy.type = facet_value %u32, (%Copy.impl_witness.61c) [concrete] // CHECK:STDOUT: %.fbf: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.9a3 [concrete] // CHECK:STDOUT: %UInt.as.Copy.impl.Op.specific_fn: = specific_function %UInt.as.Copy.impl.Op.1bb, @UInt.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %facet_value: %type_where = facet_value %tuple.type.80b, () [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.a7b: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %facet_value.03e: %type_where = facet_value %tuple.type.80b, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.a7b: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.03e) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.4cc: %AggregateT.as_type.as.Destroy.impl.Op.type.a7b = struct_value () [concrete] // CHECK:STDOUT: %ptr.b09: type = ptr_type %tuple.type.80b [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.4cc, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.0cd: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.4cc, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.03e) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .UInt = %Core.UInt // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.UInt: %UInt.type = import_ref Core//prelude/parts/uint, UInt, loaded [concrete = constants.%UInt.generic] // CHECK:STDOUT: %Core.import_ref.ba6: @UInt.as.Copy.impl.%UInt.as.Copy.impl.Op.type (%UInt.as.Copy.impl.Op.type.cb3) = import_ref Core//prelude/parts/uint, loc17_31, loaded [symbolic = @UInt.as.Copy.impl.%UInt.as.Copy.impl.Op (constants.%UInt.as.Copy.impl.Op.ee7)] // CHECK:STDOUT: %Copy.impl_witness_table.46a = impl_witness_table (%Core.import_ref.ba6), @UInt.as.Copy.impl [concrete] @@ -1163,22 +1034,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptStruct.as.Destroy.impl: @AdaptStruct.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptStruct.as.Destroy.impl.Op.decl: %AdaptStruct.as.Destroy.impl.Op.type = fn_decl @AdaptStruct.as.Destroy.impl.Op [concrete = constants.%AdaptStruct.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a0a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a0a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e10 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptStruct [concrete = constants.%AdaptStruct] -// CHECK:STDOUT: %self: %ptr.e10 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptStruct.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptStruct.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @AdaptStruct { // CHECK:STDOUT: %int_32.loc5_14: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5_14: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1186,10 +1041,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %i32.loc5_23: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.e.f: type = struct_type {.e: %i32, .f: %i32} [concrete = constants.%struct_type.e.f] // CHECK:STDOUT: adapt_decl %struct_type.e.f [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptStruct [concrete = constants.%AdaptStruct] -// CHECK:STDOUT: impl_decl @AdaptStruct.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptStruct.as.Destroy.impl.%AdaptStruct.as.Destroy.impl.Op.decl), @AdaptStruct.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.3e2] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.e.f [concrete = constants.%complete_type.511] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1197,8 +1048,6 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: .Self = constants.%AdaptStruct // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptStruct.as.Destroy.impl.Op(%self.param: %ptr.e10) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @I(%g.param: %AdaptStruct) -> %return.param: %AdaptStruct { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -1255,9 +1104,13 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %.loc10_11.11: init %struct_type.e.f = struct_init (%.loc10_11.6, %.loc10_11.10) to %.loc10_11.4 // CHECK:STDOUT: %.loc10_11.12: init %AdaptStruct = as_compatible %.loc10_11.11 // CHECK:STDOUT: %.loc10_11.13: init %AdaptStruct = converted %h.ref, %.loc10_11.12 -// CHECK:STDOUT: %AdaptStruct.as.Destroy.impl.Op.bound: = bound_method %h.var, constants.%AdaptStruct.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%AdaptStruct, () [concrete = constants.%facet_value.14c] +// CHECK:STDOUT: %.loc9_3.12: %type_where = converted constants.%AdaptStruct, %facet_value [concrete = constants.%facet_value.14c] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %h.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.987 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.987, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.14c) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4f8] +// CHECK:STDOUT: %bound_method.loc9_3.5: = bound_method %h.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.e10 = addr_of %h.var -// CHECK:STDOUT: %AdaptStruct.as.Destroy.impl.Op.call: init %empty_tuple.type = call %AdaptStruct.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc9_3.5(%addr) // CHECK:STDOUT: return %.loc10_11.13 to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1348,10 +1201,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %.loc15_10.15: init %u32 = initialize_from %UInt.as.Copy.impl.Op.call.loc15 to %tuple.elem1.loc15_10.2 // CHECK:STDOUT: %.loc15_10.16: init %tuple.type.80b = tuple_init (%.loc15_10.13, %.loc15_10.15) to %return // CHECK:STDOUT: %.loc15_11: init %tuple.type.80b = converted %d.ref, %.loc15_10.16 -// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.80b, () [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc14_3.2: %type_where = converted constants.%tuple.type.80b, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.80b, () [concrete = constants.%facet_value.03e] +// CHECK:STDOUT: %.loc14_3.2: %type_where = converted constants.%tuple.type.80b, %facet_value [concrete = constants.%facet_value.03e] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.4cc -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.4cc, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.4cc, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.03e) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.0cd] // CHECK:STDOUT: %bound_method.loc14_3: = bound_method %d.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.b09 = addr_of %d.var // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc14_3(%addr) diff --git a/toolchain/check/testdata/class/adapter/extend_adapt.carbon b/toolchain/check/testdata/class/adapter/extend_adapt.carbon index d64d8eb47fb7..e01bbdc3fdaa 100644 --- a/toolchain/check/testdata/class/adapter/extend_adapt.carbon +++ b/toolchain/check/testdata/class/adapter/extend_adapt.carbon @@ -158,20 +158,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %pattern_type.080: type = pattern_type %SomeClassAdapter [concrete] // CHECK:STDOUT: %SomeClass.AdapterMethod.type: type = fn_type @SomeClass.AdapterMethod [concrete] // CHECK:STDOUT: %SomeClass.AdapterMethod: %SomeClass.AdapterMethod.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.25c: = impl_witness @SomeClass.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.c8a: type = ptr_type %SomeClass [concrete] -// CHECK:STDOUT: %pattern_type.a47: type = pattern_type %ptr.c8a [concrete] -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op.type: type = fn_type @SomeClass.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op: %SomeClass.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.021: = impl_witness @SomeClassAdapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.b51: type = ptr_type %SomeClassAdapter [concrete] -// CHECK:STDOUT: %pattern_type.76d: type = pattern_type %ptr.b51 [concrete] -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op.type: type = fn_type @SomeClassAdapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op: %SomeClassAdapter.as.Destroy.impl.Op.type = struct_value () [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] @@ -181,12 +169,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -219,45 +205,9 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @SomeClass.as.Destroy.impl: @SomeClass.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op.decl: %SomeClass.as.Destroy.impl.Op.type = fn_decl @SomeClass.as.Destroy.impl.Op [concrete = constants.%SomeClass.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a47 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a47 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.c8a = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] -// CHECK:STDOUT: %self: %ptr.c8a = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SomeClass.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SomeClass.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @SomeClassAdapter.as.Destroy.impl: @SomeClassAdapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op.decl: %SomeClassAdapter.as.Destroy.impl.Op.type = fn_decl @SomeClassAdapter.as.Destroy.impl.Op [concrete = constants.%SomeClassAdapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.76d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.76d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.b51 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClassAdapter [concrete = constants.%SomeClassAdapter] -// CHECK:STDOUT: %self: %ptr.b51 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SomeClassAdapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SomeClassAdapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @SomeClassAdapter { // CHECK:STDOUT: %SomeClass.ref: type = name_ref SomeClass, file.%SomeClass.decl [concrete = constants.%SomeClass] // CHECK:STDOUT: adapt_decl %SomeClass.ref [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClassAdapter [concrete = constants.%SomeClassAdapter] -// CHECK:STDOUT: impl_decl @SomeClassAdapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SomeClassAdapter.as.Destroy.impl.%SomeClassAdapter.as.Destroy.impl.Op.decl), @SomeClassAdapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.021] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -285,10 +235,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %SomeClassAdapter.ref: type = name_ref SomeClassAdapter, file.%SomeClassAdapter.decl.loc4 [concrete = constants.%SomeClassAdapter] // CHECK:STDOUT: %self: %SomeClassAdapter = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] -// CHECK:STDOUT: impl_decl @SomeClass.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SomeClass.as.Destroy.impl.%SomeClass.as.Destroy.impl.Op.decl), @SomeClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.25c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -305,10 +251,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: fn @SomeClass.AdapterMethod(%self.param: %SomeClassAdapter); // CHECK:STDOUT: -// CHECK:STDOUT: fn @SomeClass.as.Destroy.impl.Op(%self.param: %ptr.c8a) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @SomeClassAdapter.as.Destroy.impl.Op(%self.param: %ptr.b51) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @TestStaticMemberFunction(%a.param: %SomeClassAdapter) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %SomeClassAdapter = name_ref a, %a @@ -334,21 +276,9 @@ fn F(a: IntAdapter) -> i32 { // 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] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.25c: = impl_witness @SomeClass.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.c8a: type = ptr_type %SomeClass [concrete] -// CHECK:STDOUT: %pattern_type.a47: type = pattern_type %ptr.c8a [concrete] -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op.type: type = fn_type @SomeClass.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op: %SomeClass.as.Destroy.impl.Op.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: %SomeClassAdapter: type = class_type @SomeClassAdapter [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.021: = impl_witness @SomeClassAdapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.b51: type = ptr_type %SomeClassAdapter [concrete] -// CHECK:STDOUT: %pattern_type.76d: type = pattern_type %ptr.b51 [concrete] -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op.type: type = fn_type @SomeClassAdapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op: %SomeClassAdapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.080: type = pattern_type %SomeClassAdapter [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -358,12 +288,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -387,38 +315,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @SomeClass.as.Destroy.impl: @SomeClass.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op.decl: %SomeClass.as.Destroy.impl.Op.type = fn_decl @SomeClass.as.Destroy.impl.Op [concrete = constants.%SomeClass.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a47 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a47 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.c8a = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] -// CHECK:STDOUT: %self: %ptr.c8a = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SomeClass.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SomeClass.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @SomeClassAdapter.as.Destroy.impl: @SomeClassAdapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op.decl: %SomeClassAdapter.as.Destroy.impl.Op.type = fn_decl @SomeClassAdapter.as.Destroy.impl.Op [concrete = constants.%SomeClassAdapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.76d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.76d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.b51 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClassAdapter [concrete = constants.%SomeClassAdapter] -// CHECK:STDOUT: %self: %ptr.b51 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SomeClassAdapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SomeClassAdapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.3eb = binding_pattern self [concrete] @@ -428,10 +324,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] // CHECK:STDOUT: %self: %SomeClass = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] -// CHECK:STDOUT: impl_decl @SomeClass.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SomeClass.as.Destroy.impl.%SomeClass.as.Destroy.impl.Op.decl), @SomeClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.25c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -443,10 +335,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: class @SomeClassAdapter { // CHECK:STDOUT: %SomeClass.ref: type = name_ref SomeClass, file.%SomeClass.decl [concrete = constants.%SomeClass] // CHECK:STDOUT: adapt_decl %SomeClass.ref [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClassAdapter [concrete = constants.%SomeClassAdapter] -// CHECK:STDOUT: impl_decl @SomeClassAdapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SomeClassAdapter.as.Destroy.impl.%SomeClassAdapter.as.Destroy.impl.Op.decl), @SomeClassAdapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.021] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -459,10 +347,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: fn @SomeClass.F(%self.param: %SomeClass); // CHECK:STDOUT: -// CHECK:STDOUT: fn @SomeClass.as.Destroy.impl.Op(%self.param: %ptr.c8a) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @SomeClassAdapter.as.Destroy.impl.Op(%self.param: %ptr.b51) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %SomeClassAdapter) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %SomeClassAdapter = name_ref a, %a @@ -482,21 +366,9 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %SomeClass.elem: type = unbound_element_type %SomeClass, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.25c: = impl_witness @SomeClass.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.c8a: type = ptr_type %SomeClass [concrete] -// CHECK:STDOUT: %pattern_type.a47: type = pattern_type %ptr.c8a [concrete] -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op.type: type = fn_type @SomeClass.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op: %SomeClass.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b [concrete] // CHECK:STDOUT: %SomeClassAdapter: type = class_type @SomeClassAdapter [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.021: = impl_witness @SomeClassAdapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.b51: type = ptr_type %SomeClassAdapter [concrete] -// CHECK:STDOUT: %pattern_type.76d: type = pattern_type %ptr.b51 [concrete] -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op.type: type = fn_type @SomeClassAdapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op: %SomeClassAdapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.080: type = pattern_type %SomeClassAdapter [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -508,13 +380,11 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -544,38 +414,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @SomeClass.as.Destroy.impl: @SomeClass.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SomeClass.as.Destroy.impl.Op.decl: %SomeClass.as.Destroy.impl.Op.type = fn_decl @SomeClass.as.Destroy.impl.Op [concrete = constants.%SomeClass.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a47 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a47 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.c8a = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] -// CHECK:STDOUT: %self: %ptr.c8a = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SomeClass.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SomeClass.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @SomeClassAdapter.as.Destroy.impl: @SomeClassAdapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SomeClassAdapter.as.Destroy.impl.Op.decl: %SomeClassAdapter.as.Destroy.impl.Op.type = fn_decl @SomeClassAdapter.as.Destroy.impl.Op [concrete = constants.%SomeClassAdapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.76d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.76d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.b51 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClassAdapter [concrete = constants.%SomeClassAdapter] -// CHECK:STDOUT: %self: %ptr.b51 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SomeClassAdapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SomeClassAdapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @SomeClass { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -583,10 +421,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: %SomeClass.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] -// CHECK:STDOUT: impl_decl @SomeClass.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SomeClass.as.Destroy.impl.%SomeClass.as.Destroy.impl.Op.decl), @SomeClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.25c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -599,10 +433,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: class @SomeClassAdapter { // CHECK:STDOUT: %SomeClass.ref: type = name_ref SomeClass, file.%SomeClass.decl [concrete = constants.%SomeClass] // CHECK:STDOUT: adapt_decl %SomeClass.ref [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClassAdapter [concrete = constants.%SomeClassAdapter] -// CHECK:STDOUT: impl_decl @SomeClassAdapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SomeClassAdapter.as.Destroy.impl.%SomeClassAdapter.as.Destroy.impl.Op.decl), @SomeClassAdapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.021] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -613,10 +443,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: extend %SomeClass.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @SomeClass.as.Destroy.impl.Op(%self.param: %ptr.c8a) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @SomeClassAdapter.as.Destroy.impl.Op(%self.param: %ptr.b51) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %SomeClassAdapter) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %SomeClassAdapter = name_ref a, %a @@ -635,13 +461,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @StructAdapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.670: type = ptr_type %StructAdapter [concrete] -// CHECK:STDOUT: %pattern_type.671: type = pattern_type %ptr.670 [concrete] -// CHECK:STDOUT: %StructAdapter.as.Destroy.impl.Op.type: type = fn_type @StructAdapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %StructAdapter.as.Destroy.impl.Op: %StructAdapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b [concrete] // CHECK:STDOUT: %pattern_type.016: type = pattern_type %StructAdapter [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] @@ -652,12 +471,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -684,22 +501,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @StructAdapter.as.Destroy.impl: @StructAdapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %StructAdapter.as.Destroy.impl.Op.decl: %StructAdapter.as.Destroy.impl.Op.type = fn_decl @StructAdapter.as.Destroy.impl.Op [concrete = constants.%StructAdapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.671 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.671 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.670 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%StructAdapter [concrete = constants.%StructAdapter] -// CHECK:STDOUT: %self: %ptr.670 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %StructAdapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @StructAdapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @StructAdapter { // CHECK:STDOUT: %int_32.loc5_21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5_21: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -707,10 +508,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %i32.loc5_30: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b] // CHECK:STDOUT: adapt_decl %struct_type.a.b [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%StructAdapter [concrete = constants.%StructAdapter] -// CHECK:STDOUT: impl_decl @StructAdapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@StructAdapter.as.Destroy.impl.%StructAdapter.as.Destroy.impl.Op.decl), @StructAdapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -720,8 +517,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: extend %struct_type.a.b // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @StructAdapter.as.Destroy.impl.Op(%self.param: %ptr.670) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %StructAdapter) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %StructAdapter = name_ref a, %a @@ -739,13 +534,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @TupleAdapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.58b: type = ptr_type %TupleAdapter [concrete] -// CHECK:STDOUT: %pattern_type.dfa: type = pattern_type %ptr.58b [concrete] -// CHECK:STDOUT: %TupleAdapter.as.Destroy.impl.Op.type: type = fn_type @TupleAdapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %TupleAdapter.as.Destroy.impl.Op: %TupleAdapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.65d: = complete_type_witness %tuple.type.d07 [concrete] // CHECK:STDOUT: %pattern_type.ee1: type = pattern_type %TupleAdapter [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] @@ -757,12 +545,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -789,22 +575,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @TupleAdapter.as.Destroy.impl: @TupleAdapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %TupleAdapter.as.Destroy.impl.Op.decl: %TupleAdapter.as.Destroy.impl.Op.type = fn_decl @TupleAdapter.as.Destroy.impl.Op [concrete = constants.%TupleAdapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.dfa = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.dfa = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.58b = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%TupleAdapter [concrete = constants.%TupleAdapter] -// CHECK:STDOUT: %self: %ptr.58b = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %TupleAdapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @TupleAdapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @TupleAdapter { // CHECK:STDOUT: %int_32.loc5_17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5_17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -813,10 +583,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %.loc5_25: %tuple.type.24b = tuple_literal (%i32.loc5_17, %i32.loc5_22) // CHECK:STDOUT: %.loc5_26: type = converted %.loc5_25, constants.%tuple.type.d07 [concrete = constants.%tuple.type.d07] // CHECK:STDOUT: adapt_decl %.loc5_26 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%TupleAdapter [concrete = constants.%TupleAdapter] -// CHECK:STDOUT: impl_decl @TupleAdapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@TupleAdapter.as.Destroy.impl.%TupleAdapter.as.Destroy.impl.Op.decl), @TupleAdapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%tuple.type.d07 [concrete = constants.%complete_type.65d] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -825,8 +591,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: extend %.loc5_26 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @TupleAdapter.as.Destroy.impl.Op(%self.param: %ptr.58b) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %TupleAdapter) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %TupleAdapter = name_ref a, %a @@ -846,13 +610,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %IntAdapter: type = class_type @IntAdapter [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @IntAdapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.5b3: type = ptr_type %IntAdapter [concrete] -// CHECK:STDOUT: %pattern_type.010: type = pattern_type %ptr.5b3 [concrete] -// CHECK:STDOUT: %IntAdapter.as.Destroy.impl.Op.type: type = fn_type @IntAdapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %IntAdapter.as.Destroy.impl.Op: %IntAdapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %pattern_type.90a: type = pattern_type %IntAdapter [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -866,13 +623,11 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .IntLiteral = %Core.IntLiteral -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.IntLiteral: %IntLiteral.type = import_ref Core//prelude/parts/int_literal, IntLiteral, loaded [concrete = constants.%IntLiteral] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -919,22 +674,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @IntAdapter.as.Destroy.impl: @IntAdapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %IntAdapter.as.Destroy.impl.Op.decl: %IntAdapter.as.Destroy.impl.Op.type = fn_decl @IntAdapter.as.Destroy.impl.Op [concrete = constants.%IntAdapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.010 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.010 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.5b3 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%IntAdapter [concrete = constants.%IntAdapter] -// CHECK:STDOUT: %self: %ptr.5b3 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %IntAdapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @IntAdapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @IntAdapter { // CHECK:STDOUT: %MakeInt.ref: %MakeInt.type = name_ref MakeInt, file.%MakeInt.decl [concrete = constants.%MakeInt] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -942,10 +681,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %.loc7_27.1: type = value_of_initializer %MakeInt.call [concrete = constants.%i32.builtin] // CHECK:STDOUT: %.loc7_27.2: type = converted %MakeInt.call, %.loc7_27.1 [concrete = constants.%i32.builtin] // CHECK:STDOUT: adapt_decl %.loc7_27.2 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%IntAdapter [concrete = constants.%IntAdapter] -// CHECK:STDOUT: impl_decl @IntAdapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@IntAdapter.as.Destroy.impl.%IntAdapter.as.Destroy.impl.Op.decl), @IntAdapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%i32.builtin [concrete = constants.%complete_type.f8a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -958,8 +693,6 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: fn @MakeInt(%N.param: Core.IntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @IntAdapter.as.Destroy.impl.Op(%self.param: %ptr.5b3) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %IntAdapter) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %IntAdapter = name_ref a, %a diff --git a/toolchain/check/testdata/class/adapter/fail_adapt_with_subobjects.carbon b/toolchain/check/testdata/class/adapter/fail_adapt_with_subobjects.carbon index c36fc0a707e9..455ac1180d94 100644 --- a/toolchain/check/testdata/class/adapter/fail_adapt_with_subobjects.carbon +++ b/toolchain/check/testdata/class/adapter/fail_adapt_with_subobjects.carbon @@ -83,13 +83,6 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = 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: %AdaptWithBase: type = class_type @AdaptWithBase [concrete] @@ -98,21 +91,14 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %AdaptWithBase.elem: type = unbound_element_type %AdaptWithBase, %Base [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.0a2: = impl_witness @AdaptWithBase.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.52c: type = ptr_type %AdaptWithBase [concrete] -// CHECK:STDOUT: %pattern_type.d4d: type = pattern_type %ptr.52c [concrete] -// CHECK:STDOUT: %AdaptWithBase.as.Destroy.impl.Op.type: type = fn_type @AdaptWithBase.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptWithBase.as.Destroy.impl.Op: %AdaptWithBase.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -127,43 +113,7 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: %AdaptWithBase.decl: type = class_decl @AdaptWithBase [concrete = constants.%AdaptWithBase] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptWithBase.as.Destroy.impl: @AdaptWithBase.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptWithBase.as.Destroy.impl.Op.decl: %AdaptWithBase.as.Destroy.impl.Op.type = fn_decl @AdaptWithBase.as.Destroy.impl.Op [concrete = constants.%AdaptWithBase.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.d4d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.d4d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.52c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptWithBase [concrete = constants.%AdaptWithBase] -// CHECK:STDOUT: %self: %ptr.52c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptWithBase.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptWithBase.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -177,10 +127,6 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: adapt_decl %i32 [concrete] // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc15: %AdaptWithBase.elem = base_decl %Base.ref, element [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptWithBase [concrete = constants.%AdaptWithBase] -// CHECK:STDOUT: impl_decl @AdaptWithBase.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptWithBase.as.Destroy.impl.%AdaptWithBase.as.Destroy.impl.Op.decl), @AdaptWithBase.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.0a2] // CHECK:STDOUT: complete_type_witness = // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -190,10 +136,6 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptWithBase.as.Destroy.impl.Op(%self.param: %ptr.52c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_adapt_with_fields.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -203,31 +145,17 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %AdaptWithField.elem: type = unbound_element_type %AdaptWithField, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.90f: = impl_witness @AdaptWithField.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.849: type = ptr_type %AdaptWithField [concrete] -// CHECK:STDOUT: %pattern_type.55a: type = pattern_type %ptr.849 [concrete] -// CHECK:STDOUT: %AdaptWithField.as.Destroy.impl.Op.type: type = fn_type @AdaptWithField.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptWithField.as.Destroy.impl.Op: %AdaptWithField.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %AdaptWithFields: type = class_type @AdaptWithFields [concrete] // CHECK:STDOUT: %AdaptWithFields.elem: type = unbound_element_type %AdaptWithFields, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.f27: = impl_witness @AdaptWithFields.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.521: type = ptr_type %AdaptWithFields [concrete] -// CHECK:STDOUT: %pattern_type.1a9: type = pattern_type %ptr.521 [concrete] -// CHECK:STDOUT: %AdaptWithFields.as.Destroy.impl.Op.type: type = fn_type @AdaptWithFields.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptWithFields.as.Destroy.impl.Op: %AdaptWithFields.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -241,38 +169,6 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: %AdaptWithFields.decl: type = class_decl @AdaptWithFields [concrete = constants.%AdaptWithFields] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptWithField.as.Destroy.impl: @AdaptWithField.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptWithField.as.Destroy.impl.Op.decl: %AdaptWithField.as.Destroy.impl.Op.type = fn_decl @AdaptWithField.as.Destroy.impl.Op [concrete = constants.%AdaptWithField.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.55a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.55a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.849 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptWithField [concrete = constants.%AdaptWithField] -// CHECK:STDOUT: %self: %ptr.849 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptWithField.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptWithField.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptWithFields.as.Destroy.impl: @AdaptWithFields.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptWithFields.as.Destroy.impl.Op.decl: %AdaptWithFields.as.Destroy.impl.Op.type = fn_decl @AdaptWithFields.as.Destroy.impl.Op [concrete = constants.%AdaptWithFields.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1a9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1a9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.521 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptWithFields [concrete = constants.%AdaptWithFields] -// CHECK:STDOUT: %self: %ptr.521 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptWithFields.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptWithFields.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @AdaptWithField { // CHECK:STDOUT: %int_32.loc8: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc8: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -280,10 +176,6 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc13: %AdaptWithField.elem = field_decl n, element [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptWithField [concrete = constants.%AdaptWithField] -// CHECK:STDOUT: impl_decl @AdaptWithField.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptWithField.as.Destroy.impl.%AdaptWithField.as.Destroy.impl.Op.decl), @AdaptWithField.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.90f] // CHECK:STDOUT: complete_type_witness = // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -304,10 +196,6 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: %int_32.loc27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc27: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc27: %AdaptWithFields.elem = field_decl c, element [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptWithFields [concrete = constants.%AdaptWithFields] -// CHECK:STDOUT: impl_decl @AdaptWithFields.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptWithFields.as.Destroy.impl.%AdaptWithFields.as.Destroy.impl.Op.decl), @AdaptWithFields.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.f27] // CHECK:STDOUT: complete_type_witness = // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -317,21 +205,10 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: .c = %.loc27 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptWithField.as.Destroy.impl.Op(%self.param: %ptr.849) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptWithFields.as.Destroy.impl.Op(%self.param: %ptr.521) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_adapt_with_base_and_fields.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = 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: %AdaptWithBaseAndFields: type = class_type @AdaptWithBaseAndFields [concrete] @@ -341,21 +218,14 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %AdaptWithBaseAndFields.elem.ddf: type = unbound_element_type %AdaptWithBaseAndFields, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.fe6: = impl_witness @AdaptWithBaseAndFields.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.cbb: type = ptr_type %AdaptWithBaseAndFields [concrete] -// CHECK:STDOUT: %pattern_type.926: type = pattern_type %ptr.cbb [concrete] -// CHECK:STDOUT: %AdaptWithBaseAndFields.as.Destroy.impl.Op.type: type = fn_type @AdaptWithBaseAndFields.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptWithBaseAndFields.as.Destroy.impl.Op: %AdaptWithBaseAndFields.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -370,43 +240,7 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: %AdaptWithBaseAndFields.decl: type = class_decl @AdaptWithBaseAndFields [concrete = constants.%AdaptWithBaseAndFields] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptWithBaseAndFields.as.Destroy.impl: @AdaptWithBaseAndFields.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptWithBaseAndFields.as.Destroy.impl.Op.decl: %AdaptWithBaseAndFields.as.Destroy.impl.Op.type = fn_decl @AdaptWithBaseAndFields.as.Destroy.impl.Op [concrete = constants.%AdaptWithBaseAndFields.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.926 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.926 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.cbb = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptWithBaseAndFields [concrete = constants.%AdaptWithBaseAndFields] -// CHECK:STDOUT: %self: %ptr.cbb = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptWithBaseAndFields.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptWithBaseAndFields.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -423,10 +257,6 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: %.loc16_10: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc16_11: type = converted %.loc16_10, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: adapt_decl %.loc16_11 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptWithBaseAndFields [concrete = constants.%AdaptWithBaseAndFields] -// CHECK:STDOUT: impl_decl @AdaptWithBaseAndFields.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptWithBaseAndFields.as.Destroy.impl.%AdaptWithBaseAndFields.as.Destroy.impl.Op.decl), @AdaptWithBaseAndFields.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.fe6] // CHECK:STDOUT: complete_type_witness = // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -437,7 +267,3 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptWithBaseAndFields.as.Destroy.impl.Op(%self.param: %ptr.cbb) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/adapter/init_adapt.carbon b/toolchain/check/testdata/class/adapter/init_adapt.carbon index fec30ff098c9..079e7bed95f5 100644 --- a/toolchain/check/testdata/class/adapter/init_adapt.carbon +++ b/toolchain/check/testdata/class/adapter/init_adapt.carbon @@ -105,21 +105,9 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %AdaptC: type = class_type @AdaptC [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.19c: = impl_witness @AdaptC.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.b20: type = ptr_type %AdaptC [concrete] -// CHECK:STDOUT: %pattern_type.d7e: type = pattern_type %ptr.b20 [concrete] -// CHECK:STDOUT: %AdaptC.as.Destroy.impl.Op.type: type = fn_type @AdaptC.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptC.as.Destroy.impl.Op: %AdaptC.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] @@ -154,13 +142,11 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -250,38 +236,6 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %e: ref %C = bind_name e, %e.var [concrete = %e.var] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptC.as.Destroy.impl: @AdaptC.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptC.as.Destroy.impl.Op.decl: %AdaptC.as.Destroy.impl.Op.type = fn_decl @AdaptC.as.Destroy.impl.Op [concrete = constants.%AdaptC.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.d7e = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.d7e = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.b20 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptC [concrete = constants.%AdaptC] -// CHECK:STDOUT: %self: %ptr.b20 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptC.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptC.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -289,10 +243,6 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: %C.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.501 [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -305,10 +255,6 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: class @AdaptC { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: adapt_decl %C.ref [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptC [concrete = constants.%AdaptC] -// CHECK:STDOUT: impl_decl @AdaptC.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptC.as.Destroy.impl.%AdaptC.as.Destroy.impl.Op.decl), @AdaptC.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.19c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.501 [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -317,10 +263,6 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: .C = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptC.as.Destroy.impl.Op(%self.param: %ptr.b20) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @MakeC() -> %return.param: %C; // CHECK:STDOUT: // CHECK:STDOUT: fn @MakeAdaptC() -> %return.param: %AdaptC; @@ -364,21 +306,9 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %AdaptC: type = class_type @AdaptC [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.19c: = impl_witness @AdaptC.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.b20: type = ptr_type %AdaptC [concrete] -// CHECK:STDOUT: %pattern_type.d7e: type = pattern_type %ptr.b20 [concrete] -// CHECK:STDOUT: %AdaptC.as.Destroy.impl.Op.type: type = fn_type @AdaptC.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AdaptC.as.Destroy.impl.Op: %AdaptC.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] @@ -413,13 +343,11 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -511,38 +439,6 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %e: ref %C = bind_name e, %e.var [concrete = %e.var] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @AdaptC.as.Destroy.impl: @AdaptC.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AdaptC.as.Destroy.impl.Op.decl: %AdaptC.as.Destroy.impl.Op.type = fn_decl @AdaptC.as.Destroy.impl.Op [concrete = constants.%AdaptC.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.d7e = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.d7e = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.b20 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptC [concrete = constants.%AdaptC] -// CHECK:STDOUT: %self: %ptr.b20 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AdaptC.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AdaptC.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -550,10 +446,6 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: %C.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.501 [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -566,10 +458,6 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: class @AdaptC { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: adapt_decl %C.ref [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptC [concrete = constants.%AdaptC] -// CHECK:STDOUT: impl_decl @AdaptC.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AdaptC.as.Destroy.impl.%AdaptC.as.Destroy.impl.Op.decl), @AdaptC.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.19c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.501 [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -578,10 +466,6 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: .C = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @AdaptC.as.Destroy.impl.Op(%self.param: %ptr.b20) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @MakeC() -> %return.param: %C; // CHECK:STDOUT: // CHECK:STDOUT: fn @MakeAdaptC() -> %return.param: %AdaptC; diff --git a/toolchain/check/testdata/class/base.carbon b/toolchain/check/testdata/class/base.carbon index 70dd862862fc..2a3d23d5a4bf 100644 --- a/toolchain/check/testdata/class/base.carbon +++ b/toolchain/check/testdata/class/base.carbon @@ -59,23 +59,11 @@ class Derived { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.b.0a3: type = struct_type {.b: %i32} [concrete] // CHECK:STDOUT: %complete_type.ba8: = complete_type_witness %struct_type.b.0a3 [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem.69e: type = unbound_element_type %Derived, %Base [concrete] // CHECK:STDOUT: %Derived.elem.344: type = unbound_element_type %Derived, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.d.f8f: type = struct_type {.base: %Base, .d: %i32} [concrete] // CHECK:STDOUT: %complete_type.da6: = complete_type_witness %struct_type.base.d.f8f [concrete] // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] @@ -126,14 +114,12 @@ class Derived { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -181,46 +167,10 @@ class Derived { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc4: %Base.elem = field_decl b, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.b.0a3 [concrete = constants.%complete_type.ba8] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -235,10 +185,6 @@ class Derived { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc10: %Derived.elem.344 = field_decl d, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.d.f8f [concrete = constants.%complete_type.da6] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -250,10 +196,6 @@ class Derived { // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Make() -> %return.param: %Derived { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4.0c1] @@ -321,13 +263,6 @@ class Derived { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = 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: %Derived: type = class_type @Derived [concrete] @@ -336,23 +271,16 @@ class Derived { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.d: type = struct_type {.d: %i32} [concrete] // CHECK:STDOUT: %complete_type.860: = complete_type_witness %struct_type.d [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -367,43 +295,7 @@ class Derived { // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -416,10 +308,6 @@ class Derived { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc7: %Derived.elem = field_decl d, element0 [concrete] // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.d [concrete = constants.%complete_type.860] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -429,7 +317,3 @@ class Derived { // CHECK:STDOUT: .Base = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/base_field.carbon b/toolchain/check/testdata/class/base_field.carbon index e2492d94b594..716ccce9d674 100644 --- a/toolchain/check/testdata/class/base_field.carbon +++ b/toolchain/check/testdata/class/base_field.carbon @@ -38,25 +38,15 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b.c: type = struct_type {.a: %i32, .b: %i32, .c: %i32} [concrete] // CHECK:STDOUT: %complete_type.ebc: = complete_type_witness %struct_type.a.b.c [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem.69e: type = unbound_element_type %Derived, %Base [concrete] // CHECK:STDOUT: %Derived.elem.344: type = unbound_element_type %Derived, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.d.e.6a7: type = struct_type {.base: %Base, .d: %i32, .e: %i32} [concrete] // CHECK:STDOUT: %complete_type.401: = complete_type_witness %struct_type.base.d.e.6a7 [concrete] +// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] @@ -77,13 +67,11 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %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.0e4: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.31f) = import_ref Core//prelude/parts/copy, loc36_31, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.8a8)] // CHECK:STDOUT: %Copy.impl_witness_table.53c = impl_witness_table (%Core.import_ref.0e4), @ptr.as.Copy.impl [concrete] @@ -119,38 +107,6 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc21: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -161,10 +117,6 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: %int_32.loc18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc18: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: %Base.elem = field_decl c, element2 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.c [concrete = constants.%complete_type.ebc] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -184,10 +136,6 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: %int_32.loc25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc25: %Derived.elem.344 = field_decl e, element2 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.d.e.6a7 [concrete = constants.%complete_type.401] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -201,10 +149,6 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Access(%p.param: %ptr.404) -> %ptr.235 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %p.ref: %ptr.404 = name_ref p, %p diff --git a/toolchain/check/testdata/class/base_function_unqualified.carbon b/toolchain/check/testdata/class/base_function_unqualified.carbon index e3df56cffa5b..62d1d5bbaacf 100644 --- a/toolchain/check/testdata/class/base_function_unqualified.carbon +++ b/toolchain/check/testdata/class/base_function_unqualified.carbon @@ -34,13 +34,6 @@ fn Derived.H() { // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = 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: %Derived: type = class_type @Derived [concrete] @@ -49,22 +42,15 @@ fn Derived.H() { // CHECK:STDOUT: %Derived.G: %Derived.G.type = struct_value () [concrete] // CHECK:STDOUT: %Derived.H.type: type = fn_type @Derived.H [concrete] // CHECK:STDOUT: %Derived.H: %Derived.H.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -79,44 +65,8 @@ fn Derived.H() { // CHECK:STDOUT: %Derived.H.decl: %Derived.H.type = fn_decl @Derived.H [concrete = constants.%Derived.H] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -130,10 +80,6 @@ fn Derived.H() { // CHECK:STDOUT: %.loc20: %Derived.elem = base_decl %Base.ref, element0 [concrete] // CHECK:STDOUT: %Derived.G.decl: %Derived.G.type = fn_decl @Derived.G [concrete = constants.%Derived.G] {} {} // CHECK:STDOUT: %Derived.H.decl: %Derived.H.type = fn_decl @Derived.H [concrete = constants.%Derived.H] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base [concrete = constants.%complete_type.15c] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -149,8 +95,6 @@ fn Derived.H() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Base.F(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Derived.G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %Base.F.type = name_ref F, @Base.%Base.F.decl [concrete = constants.%Base.F] @@ -165,5 +109,3 @@ fn Derived.H() { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/base_method.carbon b/toolchain/check/testdata/class/base_method.carbon index 10dafc9bee3e..7ce02c6c4a93 100644 --- a/toolchain/check/testdata/class/base_method.carbon +++ b/toolchain/check/testdata/class/base_method.carbon @@ -45,10 +45,6 @@ fn Call(p: Derived*) { // CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F [concrete] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %complete_type.fd7: = complete_type_witness %struct_type.a [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -70,13 +66,10 @@ fn Call(p: Derived*) { // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.b1e: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base.b1e [concrete] +// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -84,13 +77,11 @@ fn Call(p: Derived*) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -131,38 +122,6 @@ fn Call(p: Derived*) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc25: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -179,10 +138,6 @@ fn Call(p: Derived*) { // CHECK:STDOUT: } // CHECK:STDOUT: %self.loc18: %ptr.11f = bind_name self, %self.param.loc18 // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -195,10 +150,6 @@ fn Call(p: Derived*) { // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc26: %Derived.elem = base_decl %Base.ref, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.b1e [concrete = constants.%complete_type.15c] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -227,10 +178,6 @@ fn Call(p: Derived*) { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Call(%p.param: %ptr.404) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %p.ref: %ptr.404 = name_ref p, %p diff --git a/toolchain/check/testdata/class/base_method_qualified.carbon b/toolchain/check/testdata/class/base_method_qualified.carbon index d3ed68d0a372..edf97714d4e5 100644 --- a/toolchain/check/testdata/class/base_method_qualified.carbon +++ b/toolchain/check/testdata/class/base_method_qualified.carbon @@ -58,13 +58,6 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %Base.G.type: type = fn_type @Base.G [concrete] // CHECK:STDOUT: %Base.G: %Base.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = 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: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] @@ -72,15 +65,12 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [concrete] // CHECK:STDOUT: %Derived.G.type: type = fn_type @Derived.G [concrete] // CHECK:STDOUT: %Derived.G: %Derived.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.b1e: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base.b1e [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [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] @@ -92,12 +82,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -178,38 +166,6 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc22: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // 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] @@ -229,10 +185,6 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] // CHECK:STDOUT: %self: %Derived = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.b1e [concrete = constants.%complete_type.15c] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -274,10 +226,6 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param1 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -292,14 +240,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: fn @Base.G(%self.param: %Derived) -> %i32; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Derived.F(%self.param: %Derived); // CHECK:STDOUT: // CHECK:STDOUT: fn @Derived.G(%self.param: %Derived); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Call(%a.param: %Derived) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %Derived = name_ref a, %a diff --git a/toolchain/check/testdata/class/base_method_shadow.carbon b/toolchain/check/testdata/class/base_method_shadow.carbon index 727267c0bd9a..de457cc83f27 100644 --- a/toolchain/check/testdata/class/base_method_shadow.carbon +++ b/toolchain/check/testdata/class/base_method_shadow.carbon @@ -47,10 +47,6 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // 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] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: %B: type = class_type @B [concrete] @@ -59,9 +55,6 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F [concrete] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.953: type = struct_type {.base: %A} [concrete] // CHECK:STDOUT: %complete_type.020: = complete_type_witness %struct_type.base.953 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -70,29 +63,21 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ff: type = struct_type {.base: %B} [concrete] // CHECK:STDOUT: %complete_type.98e: = complete_type_witness %struct_type.base.0ff [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %D.elem: type = unbound_element_type %D, %B [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] // CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -146,70 +131,6 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc24: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc29: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.5f8 = binding_pattern self [concrete] @@ -223,10 +144,6 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -250,10 +167,6 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.953 [concrete = constants.%complete_type.020] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -280,10 +193,6 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.0ff [concrete = constants.%complete_type.98e] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -298,10 +207,6 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: class @D { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc30: %D.elem = base_decl %B.ref, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.0ff [concrete = constants.%complete_type.98e] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -315,18 +220,10 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: // CHECK:STDOUT: fn @A.F(%self.param: %ptr.6db); // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @B.F(%self.param: %ptr.e79); // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.F(%self.param: %ptr.019); // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Call(%a.param: %ptr.6db, %b.param: %ptr.e79, %c.param: %ptr.019, %d.param: %ptr.19c) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %ptr.6db = name_ref a, %a diff --git a/toolchain/check/testdata/class/basic.carbon b/toolchain/check/testdata/class/basic.carbon index c1fc171ffebc..e3398c4cc967 100644 --- a/toolchain/check/testdata/class/basic.carbon +++ b/toolchain/check/testdata/class/basic.carbon @@ -45,13 +45,6 @@ fn Run() -> i32 { // 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] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.k: type = struct_type {.k: %i32} [concrete] // CHECK:STDOUT: %complete_type.954: = complete_type_witness %struct_type.k [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -88,14 +81,12 @@ fn Run() -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -142,22 +133,6 @@ fn Run() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.7ce = binding_pattern n [concrete] @@ -196,10 +171,6 @@ fn Run() -> i32 { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc22: %Class.elem = field_decl k, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.k [concrete = constants.%complete_type.954] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -232,8 +203,6 @@ fn Run() -> i32 { // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return.loc25 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Run() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/complete_in_member_fn.carbon b/toolchain/check/testdata/class/complete_in_member_fn.carbon index 81c627edd789..7d1e67b744c8 100644 --- a/toolchain/check/testdata/class/complete_in_member_fn.carbon +++ b/toolchain/check/testdata/class/complete_in_member_fn.carbon @@ -32,13 +32,6 @@ class C { // 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] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %complete_type.fd7: = complete_type_witness %struct_type.a [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -56,13 +49,11 @@ class C { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -77,22 +68,6 @@ class C { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern c [concrete] @@ -111,10 +86,6 @@ class C { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: %C.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -139,5 +110,3 @@ class C { // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/compound_field.carbon b/toolchain/check/testdata/class/compound_field.carbon index 470147fe3d61..caef4d3373c3 100644 --- a/toolchain/check/testdata/class/compound_field.carbon +++ b/toolchain/check/testdata/class/compound_field.carbon @@ -51,23 +51,11 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b.c: type = struct_type {.a: %i32, .b: %i32, .c: %i32} [concrete] // CHECK:STDOUT: %complete_type.ebc: = complete_type_witness %struct_type.a.b.c [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem.69e: type = unbound_element_type %Derived, %Base [concrete] // CHECK:STDOUT: %Derived.elem.344: type = unbound_element_type %Derived, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.d.e.6a7: type = struct_type {.base: %Base, .d: %i32, .e: %i32} [concrete] // CHECK:STDOUT: %complete_type.401: = complete_type_witness %struct_type.base.d.e.6a7 [concrete] // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] @@ -89,6 +77,8 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %AccessBase.type: type = fn_type @AccessBase [concrete] // CHECK:STDOUT: %AccessBase: %AccessBase.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %AccessDerivedIndirect.type: type = fn_type @AccessDerivedIndirect [concrete] @@ -106,13 +96,11 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -199,38 +187,6 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc21: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -241,10 +197,6 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %int_32.loc18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc18: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: %Base.elem = field_decl c, element2 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.c [concrete = constants.%complete_type.ebc] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -264,10 +216,6 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %int_32.loc25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc25: %Derived.elem.344 = field_decl e, element2 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.d.e.6a7 [concrete = constants.%complete_type.401] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -280,10 +228,6 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @AccessDerived(%d.param: %Derived) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %d.ref.loc29_10: %Derived = name_ref d, %d diff --git a/toolchain/check/testdata/class/cross_package_import.carbon b/toolchain/check/testdata/class/cross_package_import.carbon index eedd85ded3fd..d57cd877eb41 100644 --- a/toolchain/check/testdata/class/cross_package_import.carbon +++ b/toolchain/check/testdata/class/cross_package_import.carbon @@ -108,24 +108,15 @@ var c: Other.C = {}; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -137,27 +128,7 @@ var c: Other.C = {}; // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -165,8 +136,6 @@ var c: Other.C = {}; // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- other_extern.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/class/derived_to_base.carbon b/toolchain/check/testdata/class/derived_to_base.carbon index 4c4e7b1a7c37..86935941d56f 100644 --- a/toolchain/check/testdata/class/derived_to_base.carbon +++ b/toolchain/check/testdata/class/derived_to_base.carbon @@ -123,16 +123,12 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [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] @@ -146,6 +142,8 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %Copy.facet.654: %Copy.type = facet_value %ptr.e79, (%Copy.impl_witness.e33) [concrete] // CHECK:STDOUT: %.56e: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.654 [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn.244: = specific_function %ptr.as.Copy.impl.Op.057, @ptr.as.Copy.impl.Op(%B) [concrete] +// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] +// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] // CHECK:STDOUT: %ConvertBToA.type: type = fn_type @ConvertBToA [concrete] // CHECK:STDOUT: %ConvertBToA: %ConvertBToA.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.impl_witness.6d3: = impl_witness imports.%Copy.impl_witness_table.53c, @ptr.as.Copy.impl(%A) [concrete] @@ -193,6 +191,10 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %bound_method.f36: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_3.822: %i32 = int_value 3 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%B.val, %int_3.822) [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -412,9 +414,13 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: %.loc32_59.4: ref %A = converted %.loc32_59.1, %.loc32_59.3 // CHECK:STDOUT: %.loc32_59.5: %A = bind_value %.loc32_59.4 // CHECK:STDOUT: %a: %A = bind_name a, %.loc32_59.5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc32_57.9, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc32_57.10: %type_where = converted constants.%C, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc32_57.9, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc32_57.3: = bound_method %.loc32_57.9, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.019 = addr_of %.loc32_57.9 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc32_57.3(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -422,13 +428,13 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %const.d98: type = const_type %A [concrete] // CHECK:STDOUT: %ptr.985: type = ptr_type %const.d98 [concrete] // CHECK:STDOUT: %TakeConstAPtr.type: type = fn_type @TakeConstAPtr [concrete] // CHECK:STDOUT: %TakeConstAPtr: %TakeConstAPtr.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] // CHECK:STDOUT: %const.44f: type = const_type %B [concrete] // CHECK:STDOUT: %ptr.eb4: type = ptr_type %const.44f [concrete] // CHECK:STDOUT: } @@ -465,8 +471,8 @@ fn PassConstB(p: const B) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %const.d98: type = const_type %A [concrete] // CHECK:STDOUT: %TakeConstA.type: type = fn_type @TakeConstA [concrete] // CHECK:STDOUT: %TakeConstA: %TakeConstA.type = struct_value () [concrete] diff --git a/toolchain/check/testdata/class/destroy_calls.carbon b/toolchain/check/testdata/class/destroy_calls.carbon index b67cc5d28581..1200b7d6c556 100644 --- a/toolchain/check/testdata/class/destroy_calls.carbon +++ b/toolchain/check/testdata/class/destroy_calls.carbon @@ -92,23 +92,27 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %facet_value.5f2: %type_where = facet_value %B, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.018: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.5f2) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.68f: %AggregateT.as_type.as.Destroy.impl.Op.type.018 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %facet_value.bb7: %type_where = facet_value %A, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d35: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.bb7) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.900: %AggregateT.as_type.as.Destroy.impl.Op.type.d35 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -141,15 +145,27 @@ fn G() { F({}); } // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc12: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc12: %type_where = converted constants.%C, %facet_value.loc12 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc12: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc12: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc12: %ptr.019 = addr_of %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc12) -// CHECK:STDOUT: %B.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%B.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc12: init %empty_tuple.type = call %bound_method.loc12(%addr.loc12) +// CHECK:STDOUT: %facet_value.loc11: %type_where = facet_value constants.%B, () [concrete = constants.%facet_value.5f2] +// CHECK:STDOUT: %.loc11: %type_where = converted constants.%B, %facet_value.loc11 [concrete = constants.%facet_value.5f2] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc11: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.68f +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc11: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc11: %ptr.e79 = addr_of %b.var -// CHECK:STDOUT: %B.as.Destroy.impl.Op.call: init %empty_tuple.type = call %B.as.Destroy.impl.Op.bound(%addr.loc11) -// CHECK:STDOUT: %A.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%A.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc11: init %empty_tuple.type = call %bound_method.loc11(%addr.loc11) +// CHECK:STDOUT: %facet_value.loc10: %type_where = facet_value constants.%A, () [concrete = constants.%facet_value.bb7] +// CHECK:STDOUT: %.loc10: %type_where = converted constants.%A, %facet_value.loc10 [concrete = constants.%facet_value.bb7] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.900 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc10: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc10: %ptr.6db = addr_of %a.var -// CHECK:STDOUT: %A.as.Destroy.impl.Op.call: init %empty_tuple.type = call %A.as.Destroy.impl.Op.bound(%addr.loc10) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10: init %empty_tuple.type = call %bound_method.loc10(%addr.loc10) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -157,24 +173,28 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %facet_value.5f2: %type_where = facet_value %B, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.018: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.5f2) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.68f: %AggregateT.as_type.as.Destroy.impl.Op.type.018 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %facet_value.bb7: %type_where = facet_value %A, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d35: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.bb7) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.900: %AggregateT.as_type.as.Destroy.impl.Op.type.d35 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -214,15 +234,27 @@ fn G() { F({}); } // CHECK:STDOUT: br !if.else // CHECK:STDOUT: // CHECK:STDOUT: !if.else: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc13: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc13: %type_where = converted constants.%C, %facet_value.loc13 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc13: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc13: %ptr.019 = addr_of %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc13) -// CHECK:STDOUT: %B.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%B.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13: init %empty_tuple.type = call %bound_method.loc13(%addr.loc13) +// CHECK:STDOUT: %facet_value.loc11: %type_where = facet_value constants.%B, () [concrete = constants.%facet_value.5f2] +// CHECK:STDOUT: %.loc11: %type_where = converted constants.%B, %facet_value.loc11 [concrete = constants.%facet_value.5f2] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc11: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.68f +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc11: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc11: %ptr.e79 = addr_of %b.var -// CHECK:STDOUT: %B.as.Destroy.impl.Op.call: init %empty_tuple.type = call %B.as.Destroy.impl.Op.bound(%addr.loc11) -// CHECK:STDOUT: %A.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%A.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc11: init %empty_tuple.type = call %bound_method.loc11(%addr.loc11) +// CHECK:STDOUT: %facet_value.loc10: %type_where = facet_value constants.%A, () [concrete = constants.%facet_value.bb7] +// CHECK:STDOUT: %.loc10: %type_where = converted constants.%A, %facet_value.loc10 [concrete = constants.%facet_value.bb7] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.900 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc10: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc10: %ptr.6db = addr_of %a.var -// CHECK:STDOUT: %A.as.Destroy.impl.Op.call: init %empty_tuple.type = call %A.as.Destroy.impl.Op.bound(%addr.loc10) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10: init %empty_tuple.type = call %bound_method.loc10(%addr.loc10) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -233,23 +265,27 @@ fn G() { F({}); } // CHECK:STDOUT: %A.Make.type: type = fn_type @A.Make [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %A.Make: %A.Make.type = struct_value () [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @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: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.Make.type: type = fn_type @C.Make [concrete] // CHECK:STDOUT: %C.Make: %C.Make.type = struct_value () [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %facet_value.5f2: %type_where = facet_value %B, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.018: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.5f2) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.68f: %AggregateT.as_type.as.Destroy.impl.Op.type.018 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %facet_value.bb7: %type_where = facet_value %A, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d35: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.bb7) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.900: %AggregateT.as_type.as.Destroy.impl.Op.type.d35 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -276,15 +312,27 @@ fn G() { F({}); } // CHECK:STDOUT: %.loc14_10.1: ref %C = temporary_storage // CHECK:STDOUT: %C.Make.call: init %C = call %Make.ref.loc14() to %.loc14_10.1 // CHECK:STDOUT: %.loc14_10.2: ref %C = temporary %.loc14_10.1, %C.Make.call -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc14_10.2, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc14: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc14_10.3: %type_where = converted constants.%C, %facet_value.loc14 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc14: = bound_method %.loc14_10.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc14: = bound_method %.loc14_10.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc14: %ptr.019 = addr_of %.loc14_10.2 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc14) -// CHECK:STDOUT: %B.as.Destroy.impl.Op.bound: = bound_method %.loc13_10.2, constants.%B.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc14: init %empty_tuple.type = call %bound_method.loc14(%addr.loc14) +// CHECK:STDOUT: %facet_value.loc13: %type_where = facet_value constants.%B, () [concrete = constants.%facet_value.5f2] +// CHECK:STDOUT: %.loc13_10.3: %type_where = converted constants.%B, %facet_value.loc13 [concrete = constants.%facet_value.5f2] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13: = bound_method %.loc13_10.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.68f +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc13: = bound_method %.loc13_10.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc13: %ptr.e79 = addr_of %.loc13_10.2 -// CHECK:STDOUT: %B.as.Destroy.impl.Op.call: init %empty_tuple.type = call %B.as.Destroy.impl.Op.bound(%addr.loc13) -// CHECK:STDOUT: %A.as.Destroy.impl.Op.bound: = bound_method %.loc12_10.2, constants.%A.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13: init %empty_tuple.type = call %bound_method.loc13(%addr.loc13) +// CHECK:STDOUT: %facet_value.loc12: %type_where = facet_value constants.%A, () [concrete = constants.%facet_value.bb7] +// CHECK:STDOUT: %.loc12_10.3: %type_where = converted constants.%A, %facet_value.loc12 [concrete = constants.%facet_value.bb7] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc12: = bound_method %.loc12_10.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.900 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc12: = bound_method %.loc12_10.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc12: %ptr.6db = addr_of %.loc12_10.2 -// CHECK:STDOUT: %A.as.Destroy.impl.Op.call: init %empty_tuple.type = call %A.as.Destroy.impl.Op.bound(%addr.loc12) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc12: init %empty_tuple.type = call %bound_method.loc12(%addr.loc12) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -292,15 +340,17 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %D.type: type = generic_class_type @D [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %D.generic: %D.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %D.113: type = class_type @D, @D(%C) [concrete] // CHECK:STDOUT: %pattern_type.c957: type = pattern_type %D.113 [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type.50a: type = fn_type @D.as.Destroy.impl.Op, @D.as.Destroy.impl(%C) [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.4c5: %D.as.Destroy.impl.Op.type.50a = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %D.113, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6df: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.d42: %AggregateT.as_type.as.Destroy.impl.Op.type.6df = struct_value () [concrete] // CHECK:STDOUT: %ptr.22d: type = ptr_type %D.113 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -318,17 +368,19 @@ fn G() { F({}); } // CHECK:STDOUT: %a.var_patt: %pattern_type.c957 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %D.113 = var %a.var_patt -// CHECK:STDOUT: %.loc9: type = splice_block %D [concrete = constants.%D.113] { +// CHECK:STDOUT: %.loc9_13: type = splice_block %D [concrete = constants.%D.113] { // CHECK:STDOUT: %D.ref: %D.type = name_ref D, file.%D.decl [concrete = constants.%D.generic] // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = class_type @D, @D(constants.%C) [concrete = constants.%D.113] // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %D.113 = bind_name a, %a.var -// CHECK:STDOUT: %D.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%D.as.Destroy.impl.Op.4c5 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%D.113, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc9_3: %type_where = converted constants.%D.113, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.d42 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method: = bound_method %a.var, %D.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.22d = addr_of %a.var -// CHECK:STDOUT: %D.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -341,35 +393,42 @@ fn G() { F({}); } // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [template] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.4c2: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [template] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [template] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.1da: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [template] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.d87: %C.as.Destroy.impl.Op.type.1da = struct_value () [template] -// CHECK:STDOUT: %Destroy.facet.2c0: %Destroy.type = facet_value %C.f2e, (%Destroy.impl_witness.4c2) [template] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.389: = require_complete_type %C.f2e [template] // CHECK:STDOUT: %pattern_type.e5e: type = pattern_type %C.f2e [template] -// CHECK:STDOUT: %.c7b: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.2c0 [template] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.d58: = specific_function %C.as.Destroy.impl.Op.d87, @C.as.Destroy.impl.Op(%T) [template] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %AggregateT: %type_where = bind_symbolic_name AggregateT, 0 [symbolic] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.190: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%AggregateT) [symbolic] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.8a0: %AggregateT.as_type.as.Destroy.impl.Op.type.190 = struct_value () [symbolic] +// CHECK:STDOUT: %facet_value.cb6: %type_where = facet_value %C.f2e, () [template] +// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [template] // CHECK:STDOUT: %require_complete.448: = require_complete_type %ptr.7d2 [template] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.ede: = lookup_impl_witness %C.f2e, @Destroy [template] +// CHECK:STDOUT: %Destroy.facet.036: %Destroy.type = facet_value %C.f2e, (%Destroy.lookup_impl_witness.ede) [template] +// CHECK:STDOUT: %.9ae: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.036 [template] +// CHECK:STDOUT: %impl.elem0.107: %.9ae = impl_witness_access %Destroy.lookup_impl_witness.ede, element0 [template] +// CHECK:STDOUT: %specific_impl_fn.1a1: = specific_impl_function %impl.elem0.107, @Destroy.Op(%Destroy.facet.036) [template] // CHECK:STDOUT: %C.7a7: type = class_type @C, @C(%empty_struct_type) [concrete] // CHECK:STDOUT: %pattern_type.99a: type = pattern_type %C.7a7 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.40b: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%empty_struct_type) [concrete] -// CHECK:STDOUT: %Destroy.facet.6d2: %Destroy.type = facet_value %C.7a7, (%Destroy.impl_witness.40b) [concrete] -// CHECK:STDOUT: %.75e: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.6d2 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.f30: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%empty_struct_type) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.23d: %C.as.Destroy.impl.Op.type.f30 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.036: %type_where = facet_value %C.7a7, () [concrete] +// CHECK:STDOUT: %Destroy.impl_witness.de7: = impl_witness imports.%Destroy.impl_witness_table.2d3, @AggregateT.as_type.as.Destroy.impl(%facet_value.036) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6ad: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.036) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.76a: %AggregateT.as_type.as.Destroy.impl.Op.type.6ad = struct_value () [concrete] // CHECK:STDOUT: %ptr.308: type = ptr_type %C.7a7 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.ce9: = specific_function %C.as.Destroy.impl.Op.23d, @C.as.Destroy.impl.Op(%empty_struct_type) [concrete] // CHECK:STDOUT: %complete_type.903: = complete_type_witness %ptr.308 [concrete] +// CHECK:STDOUT: %Destroy.facet.0b0: %Destroy.type = facet_value %C.7a7, (%Destroy.impl_witness.de7) [concrete] +// CHECK:STDOUT: %.e7d: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.0b0 [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.76a, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.036) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core.import_ref.d51: @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op.type (%AggregateT.as_type.as.Destroy.impl.Op.type.190) = import_ref Core//prelude/parts/destroy, loc29_29, loaded [symbolic = @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op (constants.%AggregateT.as_type.as.Destroy.impl.Op.8a0)] +// CHECK:STDOUT: %Destroy.impl_witness_table.2d3 = impl_witness_table (%Core.import_ref.d51), @AggregateT.as_type.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -379,6 +438,8 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: %T.loc6_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc6_15.1 (constants.%T)] // CHECK:STDOUT: } +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C.7a7, () [concrete = constants.%facet_value.036] +// CHECK:STDOUT: %.loc7: %type_where = converted constants.%C.7a7, %facet_value [concrete = constants.%facet_value.036] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_15.2: type) { @@ -388,12 +449,12 @@ fn G() { F({}); } // CHECK:STDOUT: %C.loc7_13.2: type = class_type @C, @C(%T.loc6_15.1) [template = %C.loc7_13.2 (constants.%C.f2e)] // CHECK:STDOUT: %require_complete.loc7_13: = require_complete_type %C.loc7_13.2 [template = %require_complete.loc7_13 (constants.%require_complete.389)] // CHECK:STDOUT: %pattern_type: type = pattern_type %C.loc7_13.2 [template = %pattern_type (constants.%pattern_type.e5e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T.loc6_15.1) [template = %Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %C.loc7_13.2, (%Destroy.impl_witness) [template = %Destroy.facet (constants.%Destroy.facet.2c0)] -// CHECK:STDOUT: %.loc7_3: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [template = %.loc7_3 (constants.%.c7b)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T.loc6_15.1) [template = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.1da)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @F.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.1da) = struct_value () [template = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.d87)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function %C.as.Destroy.impl.Op, @C.as.Destroy.impl.Op(%T.loc6_15.1) [template = %C.as.Destroy.impl.Op.specific_fn (constants.%C.as.Destroy.impl.Op.specific_fn.d58)] +// CHECK:STDOUT: %facet_value.loc7_3.2: %type_where = facet_value %C.loc7_13.2, () [template = %facet_value.loc7_3.2 (constants.%facet_value.cb6)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %C.loc7_13.2, @Destroy [template = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.ede)] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %C.loc7_13.2, (%Destroy.lookup_impl_witness) [template = %Destroy.facet (constants.%Destroy.facet.036)] +// CHECK:STDOUT: %.loc7_3.3: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [template = %.loc7_3.3 (constants.%.9ae)] +// CHECK:STDOUT: %impl.elem0.loc7_3.2: @F.%.loc7_3.3 (%.9ae) = impl_witness_access %Destroy.lookup_impl_witness, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0.107)] +// CHECK:STDOUT: %specific_impl_fn.loc7_3.2: = specific_impl_function %impl.elem0.loc7_3.2, @Destroy.Op(%Destroy.facet) [template = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn.1a1)] // CHECK:STDOUT: %ptr: type = ptr_type %C.loc7_13.2 [template = %ptr (constants.%ptr.7d2)] // CHECK:STDOUT: %require_complete.loc7_3: = require_complete_type %ptr [template = %require_complete.loc7_3 (constants.%require_complete.448)] // CHECK:STDOUT: @@ -410,12 +471,14 @@ fn G() { F({}); } // CHECK:STDOUT: %C.loc7_13.1: type = class_type @C, @C(constants.%T) [template = %C.loc7_13.2 (constants.%C.f2e)] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @F.%C.loc7_13.2 (%C.f2e) = bind_name v, %v.var -// CHECK:STDOUT: %impl.elem0: @F.%.loc7_3 (%.c7b) = impl_witness_access constants.%Destroy.impl_witness.4c2, element0 [template = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.d87)] -// CHECK:STDOUT: %bound_method.loc7_3.1: = bound_method %v.var, %impl.elem0 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @C.as.Destroy.impl.Op(constants.%T) [template = %C.as.Destroy.impl.Op.specific_fn (constants.%C.as.Destroy.impl.Op.specific_fn.d58)] -// CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %v.var, %specific_fn +// CHECK:STDOUT: %facet_value.loc7_3.1: %type_where = facet_value constants.%C.f2e, () [template = %facet_value.loc7_3.2 (constants.%facet_value.cb6)] +// CHECK:STDOUT: %.loc7_3.1: %type_where = converted constants.%C.f2e, %facet_value.loc7_3.1 [template = %facet_value.loc7_3.2 (constants.%facet_value.cb6)] +// CHECK:STDOUT: %impl.elem0.loc7_3.1: @F.%.loc7_3.3 (%.9ae) = impl_witness_access constants.%Destroy.lookup_impl_witness.ede, element0 [template = %impl.elem0.loc7_3.2 (constants.%impl.elem0.107)] +// CHECK:STDOUT: %bound_method.loc7_3.1: = bound_method %v.var, %impl.elem0.loc7_3.1 +// CHECK:STDOUT: %specific_impl_fn.loc7_3.1: = specific_impl_function %impl.elem0.loc7_3.1, @Destroy.Op(constants.%Destroy.facet.036) [template = %specific_impl_fn.loc7_3.2 (constants.%specific_impl_fn.1a1)] +// CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %v.var, %specific_impl_fn.loc7_3.1 // CHECK:STDOUT: %addr: @F.%ptr (%ptr.7d2) = addr_of %v.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc7_3.2(%addr) +// CHECK:STDOUT: %.loc7_3.2: init %empty_tuple.type = call %bound_method.loc7_3.2(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -431,12 +494,12 @@ fn G() { F({}); } // CHECK:STDOUT: %C.loc7_13.2 => constants.%C.7a7 // CHECK:STDOUT: %require_complete.loc7_13 => constants.%complete_type.357 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.99a -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.40b -// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.6d2 -// CHECK:STDOUT: %.loc7_3 => constants.%.75e -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.f30 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.23d -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn => constants.%C.as.Destroy.impl.Op.specific_fn.ce9 +// CHECK:STDOUT: %facet_value.loc7_3.2 => constants.%facet_value.036 +// CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%Destroy.impl_witness.de7 +// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.0b0 +// CHECK:STDOUT: %.loc7_3.3 => constants.%.e7d +// CHECK:STDOUT: %impl.elem0.loc7_3.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.76a +// CHECK:STDOUT: %specific_impl_fn.loc7_3.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %ptr => constants.%ptr.308 // CHECK:STDOUT: %require_complete.loc7_3 => constants.%complete_type.903 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/fail_abstract.carbon b/toolchain/check/testdata/class/fail_abstract.carbon index 09d5c394ceab..bdebf1f02fd6 100644 --- a/toolchain/check/testdata/class/fail_abstract.carbon +++ b/toolchain/check/testdata/class/fail_abstract.carbon @@ -197,30 +197,16 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d51: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.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: %Contains: type = class_type @Contains [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.004: = impl_witness @Contains.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.216: type = ptr_type %Contains [concrete] -// CHECK:STDOUT: %pattern_type.cce: type = pattern_type %ptr.216 [concrete] -// CHECK:STDOUT: %Contains.as.Destroy.impl.Op.type: type = fn_type @Contains.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Contains.as.Destroy.impl.Op: %Contains.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -234,43 +220,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Contains.decl: type = class_decl @Contains [concrete = constants.%Contains] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Contains.as.Destroy.impl: @Contains.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Contains.as.Destroy.impl.Op.decl: %Contains.as.Destroy.impl.Op.type = fn_decl @Contains.as.Destroy.impl.Op [concrete = constants.%Contains.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.cce = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.cce = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.216 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Contains [concrete = constants.%Contains] -// CHECK:STDOUT: %self: %ptr.216 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Contains.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Contains.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d51] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -281,10 +231,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: class @Contains { // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %.loc15: = field_decl a, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Contains [concrete = constants.%Contains] -// CHECK:STDOUT: impl_decl @Contains.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Contains.as.Destroy.impl.%Contains.as.Destroy.impl.Op.decl), @Contains.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.004] // CHECK:STDOUT: %complete_type: = complete_type_witness [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -294,25 +240,15 @@ fn CallReturnAbstract() { // CHECK:STDOUT: .a = %.loc15 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Contains.as.Destroy.impl.Op(%self.param: %ptr.216) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_abstract_var.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.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: %Var.type: type = fn_type @Var [concrete] // CHECK:STDOUT: %Var: %Var.type = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -335,27 +271,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Var.decl: %Var.type = fn_decl @Var [concrete = constants.%Var] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -363,8 +279,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: .Self = constants.%Abstract // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Var() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -381,27 +295,18 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.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: %pattern_type.41e: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -413,8 +318,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.patt: %pattern_type.41e = binding_pattern a [concrete] -// CHECK:STDOUT: %a.param_patt: %pattern_type.41e = value_param_pattern %a.patt, call_param0 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Abstract.ref.loc7: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -422,27 +327,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -450,12 +335,10 @@ fn CallReturnAbstract() { // CHECK:STDOUT: .Self = constants.%Abstract // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %Abstract) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %pattern_type.41e = binding_pattern l [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type = binding_pattern l [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %Abstract = name_ref a, %a // CHECK:STDOUT: %Abstract.ref.loc8: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -467,30 +350,16 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d51: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.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: %Adapter: type = class_type @Adapter [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.988: = impl_witness @Adapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.0f9: type = ptr_type %Adapter [concrete] -// CHECK:STDOUT: %pattern_type.20f: type = pattern_type %ptr.0f9 [concrete] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.type: type = fn_type @Adapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op: %Adapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -504,43 +373,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Adapter.decl: type = class_decl @Adapter [concrete = constants.%Adapter] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Adapter.as.Destroy.impl: @Adapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.decl: %Adapter.as.Destroy.impl.Op.type = fn_decl @Adapter.as.Destroy.impl.Op [concrete = constants.%Adapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.20f = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.20f = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.0f9 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapter [concrete = constants.%Adapter] -// CHECK:STDOUT: %self: %ptr.0f9 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Adapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Adapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d51] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -551,10 +384,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: class @Adapter { // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: adapt_decl [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapter [concrete = constants.%Adapter] -// CHECK:STDOUT: impl_decl @Adapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Adapter.as.Destroy.impl.%Adapter.as.Destroy.impl.Op.decl), @Adapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.988] // CHECK:STDOUT: %complete_type: = complete_type_witness [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -563,26 +392,15 @@ fn CallReturnAbstract() { // CHECK:STDOUT: .Abstract = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Adapter.as.Destroy.impl.Op(%self.param: %ptr.0f9) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- define_and_call_abstract_param.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.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: %pattern_type.41e: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [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: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] @@ -590,11 +408,9 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -607,16 +423,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.patt: %pattern_type.41e = binding_pattern a [concrete] -// CHECK:STDOUT: %a.param_patt: %pattern_type.41e = value_param_pattern %a.patt, call_param0 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 [concrete] // 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 = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %p.patt: %pattern_type.41e = binding_pattern p [concrete] -// CHECK:STDOUT: %p.param_patt: %pattern_type.41e = value_param_pattern %p.patt, call_param0 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern %p.patt, call_param0 [concrete] // 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] @@ -624,27 +440,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -652,8 +448,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: .Self = constants.%Abstract // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Param(%a.param: %Abstract); // CHECK:STDOUT: // CHECK:STDOUT: fn @Call(%p.param: %Abstract) { @@ -668,26 +462,14 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d51: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.4042: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.4042 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.type = 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: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem.513: type = unbound_element_type %Derived, %Abstract [concrete] // CHECK:STDOUT: %Derived.elem.ad9: type = unbound_element_type %Derived, %empty_struct_type [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404f: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404f [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.d.c06: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type.b4a: = complete_type_witness %struct_type.base.d.c06 [concrete] -// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %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] @@ -695,11 +477,9 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -713,8 +493,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.patt: %pattern_type.fb9 = return_slot_pattern [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.fb9 = out_param_pattern %return.patt, call_param0 [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] // CHECK:STDOUT: %return.param: ref %Derived = out_param call_param0 @@ -722,43 +502,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.4042 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.4042 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d51] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -772,10 +516,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %.loc10_11.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc10_11.2: type = converted %.loc10_11.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc10_8: %Derived.elem.ad9 = field_decl d, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.d.c06 [concrete = constants.%complete_type.b4a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -787,10 +527,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: extend %Abstract.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.4042) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Make() -> %return.param: %Derived { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc22_20: %empty_struct_type = struct_literal () @@ -803,37 +539,23 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d51: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.4042: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.4042 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.type = 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: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem.513: type = unbound_element_type %Derived, %Abstract [concrete] // CHECK:STDOUT: %Derived.elem.ad9: type = unbound_element_type %Derived, %empty_struct_type [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404f: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404f [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.d: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type.b4a: = complete_type_witness %struct_type.base.d [concrete] -// CHECK:STDOUT: %pattern_type.41e: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] // CHECK:STDOUT: %Return.type: type = fn_type @Return [concrete] // CHECK:STDOUT: %Return: %Return.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -847,10 +569,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.patt: %pattern_type.41e = binding_pattern a [concrete] -// CHECK:STDOUT: %a.param_patt: %pattern_type.41e = value_param_pattern %a.patt, call_param0 [concrete] -// CHECK:STDOUT: %return.patt: %pattern_type.41e = return_slot_pattern [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.41e = out_param_pattern %return.patt, call_param1 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a [concrete] +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %Abstract.ref.loc13_27: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %a.param: %Abstract = value_param call_param0 @@ -861,43 +583,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.4042 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.4042 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d51] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -911,10 +597,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %.loc10_11.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc10_11.2: type = converted %.loc10_11.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc10_8: %Derived.elem.ad9 = field_decl d, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.d [concrete = constants.%complete_type.b4a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -926,10 +608,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: extend %Abstract.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.4042) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Return(%a.param: %Abstract) -> %return.param: %Abstract { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %Abstract = name_ref a, %a @@ -942,23 +620,11 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %Abstract.elem: type = unbound_element_type %Abstract, %empty_struct_type [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d51: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.4042: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.4042 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.225: type = struct_type {.a: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type.8c6: = complete_type_witness %struct_type.a.225 [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem.513: type = unbound_element_type %Derived, %Abstract [concrete] // CHECK:STDOUT: %Derived.elem.ad9: type = unbound_element_type %Derived, %empty_struct_type [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404f: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404f [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.d.c06: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type.b4a: = complete_type_witness %struct_type.base.d.c06 [concrete] // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] @@ -969,11 +635,9 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1002,46 +666,10 @@ fn CallReturnAbstract() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.4042 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.4042 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { // CHECK:STDOUT: %.loc5_11.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc5_11.2: type = converted %.loc5_11.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc5_8: %Abstract.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d51] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.225 [concrete = constants.%complete_type.8c6] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1056,10 +684,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %.loc11_11.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc11_11.2: type = converted %.loc11_11.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc11_8: %Derived.elem.ad9 = field_decl d, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.d.c06 [concrete = constants.%complete_type.b4a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1071,10 +695,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: extend %Abstract.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.4042) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Access(%d.param: %Derived) -> %empty_struct_type { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d @@ -1088,27 +708,18 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.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: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.41e: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1122,27 +733,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1150,12 +741,10 @@ fn CallReturnAbstract() { // CHECK:STDOUT: .Self = constants.%Abstract // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %pattern_type.41e = binding_pattern l [concrete] +// CHECK:STDOUT: %l.patt: %pattern_type = binding_pattern l [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8: %empty_struct_type = struct_literal () // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -1167,16 +756,9 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.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: %pattern_type.41e: type = pattern_type %Abstract [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %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] @@ -1185,11 +767,9 @@ fn CallReturnAbstract() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1202,8 +782,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.patt: %pattern_type.41e = return_slot_pattern [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.41e = out_param_pattern %return.patt, call_param0 [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %return.param: ref %Abstract = out_param call_param0 @@ -1212,27 +792,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %CallReturnAbstract.decl: %CallReturnAbstract.type = fn_decl @CallReturnAbstract [concrete = constants.%CallReturnAbstract] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1240,8 +800,6 @@ fn CallReturnAbstract() { // CHECK:STDOUT: .Self = constants.%Abstract // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ReturnAbstract() -> %return.param: %Abstract; // CHECK:STDOUT: // CHECK:STDOUT: fn @CallReturnAbstract() { diff --git a/toolchain/check/testdata/class/fail_abstract_in_tuple.carbon b/toolchain/check/testdata/class/fail_abstract_in_tuple.carbon index ef528c23625f..14d8b1d366c2 100644 --- a/toolchain/check/testdata/class/fail_abstract_in_tuple.carbon +++ b/toolchain/check/testdata/class/fail_abstract_in_tuple.carbon @@ -129,32 +129,18 @@ fn Var5() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract1: type = class_type @Abstract1 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.9de: = impl_witness @Abstract1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.cfc: type = ptr_type %Abstract1 [concrete] -// CHECK:STDOUT: %pattern_type.15b: type = pattern_type %ptr.cfc [concrete] -// CHECK:STDOUT: %Abstract1.as.Destroy.impl.Op.type: type = fn_type @Abstract1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract1.as.Destroy.impl.Op: %Abstract1.as.Destroy.impl.Op.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: %Contains: type = class_type @Contains [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.f19: type = tuple_type (%Abstract1) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.004: = impl_witness @Contains.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.216: type = ptr_type %Contains [concrete] -// CHECK:STDOUT: %pattern_type.cce: type = pattern_type %ptr.216 [concrete] -// CHECK:STDOUT: %Contains.as.Destroy.impl.Op.type: type = fn_type @Contains.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Contains.as.Destroy.impl.Op: %Contains.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -168,43 +154,7 @@ fn Var5() { // CHECK:STDOUT: %Contains.decl: type = class_decl @Contains [concrete = constants.%Contains] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract1.as.Destroy.impl: @Abstract1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract1.as.Destroy.impl.Op.decl: %Abstract1.as.Destroy.impl.Op.type = fn_decl @Abstract1.as.Destroy.impl.Op [concrete = constants.%Abstract1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.15b = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.15b = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.cfc = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract1 [concrete = constants.%Abstract1] -// CHECK:STDOUT: %self: %ptr.cfc = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Contains.as.Destroy.impl: @Contains.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Contains.as.Destroy.impl.Op.decl: %Contains.as.Destroy.impl.Op.type = fn_decl @Contains.as.Destroy.impl.Op [concrete = constants.%Contains.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.cce = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.cce = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.216 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Contains [concrete = constants.%Contains] -// CHECK:STDOUT: %self: %ptr.216 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Contains.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Contains.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract1 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract1 [concrete = constants.%Abstract1] -// CHECK:STDOUT: impl_decl @Abstract1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract1.as.Destroy.impl.%Abstract1.as.Destroy.impl.Op.decl), @Abstract1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.9de] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -217,10 +167,6 @@ fn Var5() { // CHECK:STDOUT: %.loc13_21.1: %tuple.type.85c = tuple_literal (%Abstract1.ref) // CHECK:STDOUT: %.loc13_21.2: type = converted %.loc13_21.1, constants.%tuple.type.f19 [concrete = constants.%tuple.type.f19] // CHECK:STDOUT: %.loc13_8: = field_decl a, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Contains [concrete = constants.%Contains] -// CHECK:STDOUT: impl_decl @Contains.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Contains.as.Destroy.impl.%Contains.as.Destroy.impl.Op.decl), @Contains.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.004] // CHECK:STDOUT: %complete_type: = complete_type_witness [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -230,27 +176,17 @@ fn Var5() { // CHECK:STDOUT: .a = %.loc13_8 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract1.as.Destroy.impl.Op(%self.param: %ptr.cfc) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Contains.as.Destroy.impl.Op(%self.param: %ptr.216) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_abstract_var.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract2: type = class_type @Abstract2 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract2.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6ce: type = ptr_type %Abstract2 [concrete] -// CHECK:STDOUT: %pattern_type.5f0: type = pattern_type %ptr.6ce [concrete] -// CHECK:STDOUT: %Abstract2.as.Destroy.impl.Op.type: type = fn_type @Abstract2.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract2.as.Destroy.impl.Op: %Abstract2.as.Destroy.impl.Op.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: %Var.type: type = fn_type @Var [concrete] // CHECK:STDOUT: %Var: %Var.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.ac6: type = tuple_type (%Abstract2) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -273,27 +209,7 @@ fn Var5() { // CHECK:STDOUT: %Var.decl: %Var.type = fn_decl @Var [concrete = constants.%Var] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract2.as.Destroy.impl: @Abstract2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract2.as.Destroy.impl.Op.decl: %Abstract2.as.Destroy.impl.Op.type = fn_decl @Abstract2.as.Destroy.impl.Op [concrete = constants.%Abstract2.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f0 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f0 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6ce = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract2 [concrete = constants.%Abstract2] -// CHECK:STDOUT: %self: %ptr.6ce = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract2 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract2 [concrete = constants.%Abstract2] -// CHECK:STDOUT: impl_decl @Abstract2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract2.as.Destroy.impl.%Abstract2.as.Destroy.impl.Op.decl), @Abstract2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -301,8 +217,6 @@ fn Var5() { // CHECK:STDOUT: .Self = constants.%Abstract2 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract2.as.Destroy.impl.Op(%self.param: %ptr.6ce) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Var() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -323,13 +237,6 @@ fn Var5() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract3: type = class_type @Abstract3 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract3.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e65: type = ptr_type %Abstract3 [concrete] -// CHECK:STDOUT: %pattern_type.033: type = pattern_type %ptr.e65 [concrete] -// CHECK:STDOUT: %Abstract3.as.Destroy.impl.Op.type: type = fn_type @Abstract3.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract3.as.Destroy.impl.Op: %Abstract3.as.Destroy.impl.Op.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: %pattern_type.32b: type = pattern_type %Abstract3 [concrete] @@ -342,11 +249,9 @@ fn Var5() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -367,27 +272,7 @@ fn Var5() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract3.as.Destroy.impl: @Abstract3.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract3.as.Destroy.impl.Op.decl: %Abstract3.as.Destroy.impl.Op.type = fn_decl @Abstract3.as.Destroy.impl.Op [concrete = constants.%Abstract3.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.033 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.033 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e65 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract3 [concrete = constants.%Abstract3] -// CHECK:STDOUT: %self: %ptr.e65 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract3.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract3.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract3 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract3 [concrete = constants.%Abstract3] -// CHECK:STDOUT: impl_decl @Abstract3.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract3.as.Destroy.impl.%Abstract3.as.Destroy.impl.Op.decl), @Abstract3.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -395,8 +280,6 @@ fn Var5() { // CHECK:STDOUT: .Self = constants.%Abstract3 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract3.as.Destroy.impl.Op(%self.param: %ptr.e65) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %Abstract3) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -417,25 +300,14 @@ fn Var5() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract4: type = class_type @Abstract4 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.23b: = impl_witness @Abstract4.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d57: type = ptr_type %Abstract4 [concrete] -// CHECK:STDOUT: %pattern_type.909: type = pattern_type %ptr.d57 [concrete] -// CHECK:STDOUT: %Abstract4.as.Destroy.impl.Op.type: type = fn_type @Abstract4.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract4.as.Destroy.impl.Op: %Abstract4.as.Destroy.impl.Op.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: %Abstract5: type = class_type @Abstract5 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ac4: = impl_witness @Abstract5.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.194: type = ptr_type %Abstract5 [concrete] -// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %ptr.194 [concrete] -// CHECK:STDOUT: %Abstract5.as.Destroy.impl.Op.type: type = fn_type @Abstract5.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract5.as.Destroy.impl.Op: %Abstract5.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Var2.type: type = fn_type @Var2 [concrete] // CHECK:STDOUT: %Var2: %Var2.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.e3e: type = tuple_type (%Abstract4, %Abstract5) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -460,43 +332,7 @@ fn Var5() { // CHECK:STDOUT: %Var2.decl: %Var2.type = fn_decl @Var2 [concrete = constants.%Var2] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract4.as.Destroy.impl: @Abstract4.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract4.as.Destroy.impl.Op.decl: %Abstract4.as.Destroy.impl.Op.type = fn_decl @Abstract4.as.Destroy.impl.Op [concrete = constants.%Abstract4.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.909 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.909 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d57 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract4 [concrete = constants.%Abstract4] -// CHECK:STDOUT: %self: %ptr.d57 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract4.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract4.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract5.as.Destroy.impl: @Abstract5.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract5.as.Destroy.impl.Op.decl: %Abstract5.as.Destroy.impl.Op.type = fn_decl @Abstract5.as.Destroy.impl.Op [concrete = constants.%Abstract5.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.7ce = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.7ce = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.194 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract5 [concrete = constants.%Abstract5] -// CHECK:STDOUT: %self: %ptr.194 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract5.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract5.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract4 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract4 [concrete = constants.%Abstract4] -// CHECK:STDOUT: impl_decl @Abstract4.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract4.as.Destroy.impl.%Abstract4.as.Destroy.impl.Op.decl), @Abstract4.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.23b] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -505,10 +341,6 @@ fn Var5() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Abstract5 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract5 [concrete = constants.%Abstract5] -// CHECK:STDOUT: impl_decl @Abstract5.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract5.as.Destroy.impl.%Abstract5.as.Destroy.impl.Op.decl), @Abstract5.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ac4] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -516,10 +348,6 @@ fn Var5() { // CHECK:STDOUT: .Self = constants.%Abstract5 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract4.as.Destroy.impl.Op(%self.param: %ptr.d57) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract5.as.Destroy.impl.Op(%self.param: %ptr.194) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Var2() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -541,19 +369,13 @@ fn Var5() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract6: type = class_type @Abstract6 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract6.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.166: type = ptr_type %Abstract6 [concrete] -// CHECK:STDOUT: %pattern_type.621: type = pattern_type %ptr.166 [concrete] -// CHECK:STDOUT: %Abstract6.as.Destroy.impl.Op.type: type = fn_type @Abstract6.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract6.as.Destroy.impl.Op: %Abstract6.as.Destroy.impl.Op.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: %Var3.type: type = fn_type @Var3 [concrete] // CHECK:STDOUT: %Var3: %Var3.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.159: type = tuple_type (type, %empty_struct_type) [concrete] // CHECK:STDOUT: %tuple.type.d93: type = tuple_type (%Abstract6, %empty_struct_type) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -576,27 +398,7 @@ fn Var5() { // CHECK:STDOUT: %Var3.decl: %Var3.type = fn_decl @Var3 [concrete = constants.%Var3] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract6.as.Destroy.impl: @Abstract6.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract6.as.Destroy.impl.Op.decl: %Abstract6.as.Destroy.impl.Op.type = fn_decl @Abstract6.as.Destroy.impl.Op [concrete = constants.%Abstract6.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.621 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.621 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.166 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract6 [concrete = constants.%Abstract6] -// CHECK:STDOUT: %self: %ptr.166 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract6.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract6.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract6 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract6 [concrete = constants.%Abstract6] -// CHECK:STDOUT: impl_decl @Abstract6.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract6.as.Destroy.impl.%Abstract6.as.Destroy.impl.Op.decl), @Abstract6.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -604,8 +406,6 @@ fn Var5() { // CHECK:STDOUT: .Self = constants.%Abstract6 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract6.as.Destroy.impl.Op(%self.param: %ptr.166) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Var3() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -628,19 +428,13 @@ fn Var5() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract7: type = class_type @Abstract7 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract7.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.817: type = ptr_type %Abstract7 [concrete] -// CHECK:STDOUT: %pattern_type.bd0: type = pattern_type %ptr.817 [concrete] -// CHECK:STDOUT: %Abstract7.as.Destroy.impl.Op.type: type = fn_type @Abstract7.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract7.as.Destroy.impl.Op: %Abstract7.as.Destroy.impl.Op.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: %Var4.type: type = fn_type @Var4 [concrete] // CHECK:STDOUT: %Var4: %Var4.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.c8c: type = tuple_type (%empty_struct_type, type) [concrete] // CHECK:STDOUT: %tuple.type.919: type = tuple_type (%empty_struct_type, %Abstract7) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -663,27 +457,7 @@ fn Var5() { // CHECK:STDOUT: %Var4.decl: %Var4.type = fn_decl @Var4 [concrete = constants.%Var4] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract7.as.Destroy.impl: @Abstract7.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract7.as.Destroy.impl.Op.decl: %Abstract7.as.Destroy.impl.Op.type = fn_decl @Abstract7.as.Destroy.impl.Op [concrete = constants.%Abstract7.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.bd0 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.bd0 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.817 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract7 [concrete = constants.%Abstract7] -// CHECK:STDOUT: %self: %ptr.817 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract7.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract7.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract7 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract7 [concrete = constants.%Abstract7] -// CHECK:STDOUT: impl_decl @Abstract7.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract7.as.Destroy.impl.%Abstract7.as.Destroy.impl.Op.decl), @Abstract7.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -691,8 +465,6 @@ fn Var5() { // CHECK:STDOUT: .Self = constants.%Abstract7 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract7.as.Destroy.impl.Op(%self.param: %ptr.817) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Var4() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -715,24 +487,15 @@ fn Var5() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -744,27 +507,7 @@ fn Var5() { // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -772,8 +515,6 @@ fn Var5() { // CHECK:STDOUT: .Self = constants.%Abstract // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_import.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/class/fail_addr_self.carbon b/toolchain/check/testdata/class/fail_addr_self.carbon index 95427dd357ae..69ca40dce123 100644 --- a/toolchain/check/testdata/class/fail_addr_self.carbon +++ b/toolchain/check/testdata/class/fail_addr_self.carbon @@ -52,10 +52,6 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.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: %F.type: type = fn_type @F [concrete] @@ -64,11 +60,9 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -97,22 +91,6 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.796 = binding_pattern self [concrete] @@ -134,10 +112,6 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %self: %Class = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -152,8 +126,6 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: // CHECK:STDOUT: fn @Class.G(%self.param: %Class); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param: %Class, %p.param: %ptr.e71) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %c.ref.loc32: %Class = name_ref c, %c diff --git a/toolchain/check/testdata/class/fail_error_recovery.carbon b/toolchain/check/testdata/class/fail_error_recovery.carbon index 47885d414100..2747ce3d74cc 100644 --- a/toolchain/check/testdata/class/fail_error_recovery.carbon +++ b/toolchain/check/testdata/class/fail_error_recovery.carbon @@ -21,13 +21,6 @@ fn F(N:! error_not_found) { virtual fn Foo[self: Self]() {} } - // CHECK:STDERR: fail_virtual_fn_in_invalid_context.carbon:[[@LINE+7]]:3: error: redefinition of `impl Self as Core.Destroy` [ImplRedefinition] - // CHECK:STDERR: base class D { - // CHECK:STDERR: ^~~~~~~~~~~~~~ - // CHECK:STDERR: fail_virtual_fn_in_invalid_context.carbon:[[@LINE-7]]:3: note: previous definition was here [ImplPreviousDefinition] - // CHECK:STDERR: base class C { - // CHECK:STDERR: ^~~~~~~~~~~~~~ - // CHECK:STDERR: base class D { extend base: C; } diff --git a/toolchain/check/testdata/class/field_access.carbon b/toolchain/check/testdata/class/field_access.carbon index 0617194b9d53..cce67d0345fe 100644 --- a/toolchain/check/testdata/class/field_access.carbon +++ b/toolchain/check/testdata/class/field_access.carbon @@ -36,13 +36,6 @@ fn Run() { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.955: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.j.k: type = struct_type {.j: %i32, .k: %i32} [concrete] // CHECK:STDOUT: %complete_type.cf7: = complete_type_witness %struct_type.j.k [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] @@ -80,29 +73,37 @@ fn Run() { // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %i32, (%Copy.impl_witness.a32) [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.d23: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d23) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d23) [concrete] +// CHECK:STDOUT: %facet_value.d3d: %type_where = facet_value %Class, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d3d) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.7c2: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.043: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d3d) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -116,22 +117,6 @@ fn Run() { // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -139,10 +124,6 @@ fn Run() { // CHECK:STDOUT: %int_32.loc17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: %Class.elem = field_decl k, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.955] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.j.k [concrete = constants.%complete_type.cf7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -152,8 +133,6 @@ fn Run() { // CHECK:STDOUT: .k = %.loc17 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -225,19 +204,27 @@ fn Run() { // CHECK:STDOUT: %i32.loc25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %ck: ref %i32 = bind_name ck, %ck.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc25: = bound_method %ck.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc25_3: = bound_method %ck.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc25: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %.loc25_3: %type_where = converted constants.%i32, %facet_value.loc25 [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc25: = bound_method %ck.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d23) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0] +// CHECK:STDOUT: %bound_method.loc25_3: = bound_method %ck.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc25: %ptr.235 = addr_of %ck.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc25: init %empty_tuple.type = call %bound_method.loc25_3(%addr.loc25) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc24: = bound_method %cj.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc24_3: = bound_method %cj.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc25: init %empty_tuple.type = call %bound_method.loc25_3(%addr.loc25) +// CHECK:STDOUT: %facet_value.loc24: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %.loc24_3: %type_where = converted constants.%i32, %facet_value.loc24 [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc24: = bound_method %cj.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d23) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0] +// CHECK:STDOUT: %bound_method.loc24_3: = bound_method %cj.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc24: %ptr.235 = addr_of %cj.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc24: init %empty_tuple.type = call %bound_method.loc24_3(%addr.loc24) -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%Class.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc24: init %empty_tuple.type = call %bound_method.loc24_3(%addr.loc24) +// CHECK:STDOUT: %facet_value.loc21: %type_where = facet_value constants.%Class, () [concrete = constants.%facet_value.d3d] +// CHECK:STDOUT: %.loc21: %type_where = converted constants.%Class, %facet_value.loc21 [concrete = constants.%facet_value.d3d] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc21: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d3d) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.043] +// CHECK:STDOUT: %bound_method.loc21: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc21: %ptr.e71 = addr_of %c.var -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Class.as.Destroy.impl.Op.bound(%addr.loc21) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc21: init %empty_tuple.type = call %bound_method.loc21(%addr.loc21) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/field_access_in_value.carbon b/toolchain/check/testdata/class/field_access_in_value.carbon index 6a06bf589a3f..91e73daf5af0 100644 --- a/toolchain/check/testdata/class/field_access_in_value.carbon +++ b/toolchain/check/testdata/class/field_access_in_value.carbon @@ -37,13 +37,6 @@ fn Test() { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.955: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.j.k: type = struct_type {.j: %i32, .k: %i32} [concrete] // CHECK:STDOUT: %complete_type.cf7: = complete_type_witness %struct_type.j.k [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] @@ -81,29 +74,37 @@ fn Test() { // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %i32, (%Copy.impl_witness.a32) [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.d23: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d23) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d23) [concrete] +// CHECK:STDOUT: %facet_value.d3d: %type_where = facet_value %Class, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d3d) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.7c2: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.043: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d3d) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -117,22 +118,6 @@ fn Test() { // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -140,10 +125,6 @@ fn Test() { // CHECK:STDOUT: %int_32.loc17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: %Class.elem = field_decl k, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.955] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.j.k [concrete = constants.%complete_type.cf7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -153,8 +134,6 @@ fn Test() { // CHECK:STDOUT: .k = %.loc17 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Test() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -233,19 +212,27 @@ fn Test() { // CHECK:STDOUT: %i32.loc26: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %ck: ref %i32 = bind_name ck, %ck.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc26: = bound_method %ck.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc26_3: = bound_method %ck.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc26: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %.loc26_3: %type_where = converted constants.%i32, %facet_value.loc26 [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc26: = bound_method %ck.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d23) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0] +// CHECK:STDOUT: %bound_method.loc26_3: = bound_method %ck.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc26: %ptr.235 = addr_of %ck.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc26: init %empty_tuple.type = call %bound_method.loc26_3(%addr.loc26) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc25: = bound_method %cj.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc25_3: = bound_method %cj.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc26: init %empty_tuple.type = call %bound_method.loc26_3(%addr.loc26) +// CHECK:STDOUT: %facet_value.loc25: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %.loc25_3: %type_where = converted constants.%i32, %facet_value.loc25 [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc25: = bound_method %cj.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d23) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0] +// CHECK:STDOUT: %bound_method.loc25_3: = bound_method %cj.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc25: %ptr.235 = addr_of %cj.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc25: init %empty_tuple.type = call %bound_method.loc25_3(%addr.loc25) -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %cv.var, constants.%Class.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc25: init %empty_tuple.type = call %bound_method.loc25_3(%addr.loc25) +// CHECK:STDOUT: %facet_value.loc21: %type_where = facet_value constants.%Class, () [concrete = constants.%facet_value.d3d] +// CHECK:STDOUT: %.loc21: %type_where = converted constants.%Class, %facet_value.loc21 [concrete = constants.%facet_value.d3d] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc21: = bound_method %cv.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d3d) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.043] +// CHECK:STDOUT: %bound_method.loc21: = bound_method %cv.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc21: %ptr.e71 = addr_of %cv.var -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Class.as.Destroy.impl.Op.bound(%addr.loc21) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc21: init %empty_tuple.type = call %bound_method.loc21(%addr.loc21) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/adapt.carbon b/toolchain/check/testdata/class/generic/adapt.carbon index 7f96d6bfc5fb..61304d250b59 100644 --- a/toolchain/check/testdata/class/generic/adapt.carbon +++ b/toolchain/check/testdata/class/generic/adapt.carbon @@ -137,13 +137,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T.8b3) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T.8b3 [symbolic] // CHECK:STDOUT: %C.elem.66c: type = unbound_element_type %C.f2e, %T.8b3 [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.4c2: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T.8b3} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x.2ac [symbolic] // CHECK:STDOUT: %Adapter: type = class_type @Adapter [concrete] @@ -158,11 +151,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.elem.476: type = unbound_element_type %C.98a, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.ed6: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x.ed6 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.988: = impl_witness @Adapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.0f9: type = ptr_type %Adapter [concrete] -// CHECK:STDOUT: %pattern_type.20f: type = pattern_type %ptr.0f9 [concrete] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.type: type = fn_type @Adapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op: %Adapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.27e: type = pattern_type %Adapter [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] @@ -181,13 +169,11 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] @@ -225,51 +211,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc4_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc4_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T.8b3) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Adapter.as.Destroy.impl: @Adapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.decl: %Adapter.as.Destroy.impl.Op.type = fn_decl @Adapter.as.Destroy.impl.Op [concrete = constants.%Adapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.20f = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.20f = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.0f9 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapter [concrete = constants.%Adapter] -// CHECK:STDOUT: %self: %ptr.0f9 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Adapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Adapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.2: type) { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T.8b3)] // CHECK:STDOUT: @@ -283,10 +224,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_9.2 [symbolic = %T.loc4_9.1 (constants.%T.8b3)] // CHECK:STDOUT: %.loc5: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T.8b3) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness constants.%struct_type.x.2ac [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 // CHECK:STDOUT: @@ -303,10 +240,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %C: type = class_type @C, @C(constants.%i32) [concrete = constants.%C.98a] // CHECK:STDOUT: adapt_decl %C [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapter [concrete = constants.%Adapter] -// CHECK:STDOUT: impl_decl @Adapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Adapter.as.Destroy.impl.%Adapter.as.Destroy.impl.Op.decl), @Adapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.988] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x.ed6 [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -315,19 +248,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: .C = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Adapter.as.Destroy.impl.Op(%self.param: %ptr.0f9) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Access(%a.param: %Adapter) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %Adapter = name_ref a, %a @@ -352,19 +272,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %T.loc4_9.1 => constants.%T.8b3 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.4c2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { // CHECK:STDOUT: %T.loc4_9.1 => constants.%i32 // CHECK:STDOUT: @@ -430,7 +337,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//adapt_specific_type, inst29 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.262: @C.%C.elem (%C.elem.66c) = import_ref Main//adapt_specific_type, loc5_8, loaded [concrete = %.22b] // CHECK:STDOUT: %Main.import_ref.709: = import_ref Main//adapt_specific_type, loc10_1, loaded [concrete = constants.%complete_type.c07] -// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//adapt_specific_type, inst94 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//adapt_specific_type, inst44 [no loc], unloaded // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %.22b: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] @@ -537,13 +444,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %C.elem.66c: type = unbound_element_type %C.f2e, %T [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.4c2: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x.2ac [symbolic] // CHECK:STDOUT: %Adapter: type = class_type @Adapter [concrete] @@ -557,11 +457,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.elem.476: type = unbound_element_type %C.98a, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.ed6: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x.ed6 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.988: = impl_witness @Adapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.0f9: type = ptr_type %Adapter [concrete] -// CHECK:STDOUT: %pattern_type.20f: type = pattern_type %ptr.0f9 [concrete] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.type: type = fn_type @Adapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op: %Adapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.27e: type = pattern_type %Adapter [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] @@ -572,13 +467,11 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } @@ -614,51 +507,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc4_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc4_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Adapter.as.Destroy.impl: @Adapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.decl: %Adapter.as.Destroy.impl.Op.type = fn_decl @Adapter.as.Destroy.impl.Op [concrete = constants.%Adapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.20f = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.20f = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.0f9 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapter [concrete = constants.%Adapter] -// CHECK:STDOUT: %self: %ptr.0f9 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Adapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Adapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.2: type) { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: @@ -672,10 +520,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_9.2 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: %.loc5: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness constants.%struct_type.x.2ac [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 // CHECK:STDOUT: @@ -692,10 +536,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %C: type = class_type @C, @C(constants.%i32) [concrete = constants.%C.98a] // CHECK:STDOUT: adapt_decl %C [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapter [concrete = constants.%Adapter] -// CHECK:STDOUT: impl_decl @Adapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Adapter.as.Destroy.impl.%Adapter.as.Destroy.impl.Op.decl), @Adapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.988] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x.ed6 [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -706,19 +546,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: extend %C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Adapter.as.Destroy.impl.Op(%self.param: %ptr.0f9) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Access(%a.param: %Adapter) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %Adapter = name_ref a, %a @@ -732,19 +559,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %T.loc4_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.4c2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { // CHECK:STDOUT: %T.loc4_9.1 => constants.%i32 // CHECK:STDOUT: @@ -768,13 +582,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %C.elem.66c: type = unbound_element_type %C.f2e, %T [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.4c2: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x.2ac [symbolic] // CHECK:STDOUT: %Adapter: type = class_type @Adapter [concrete] @@ -788,21 +595,14 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.elem.476: type = unbound_element_type %C.98a, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.ed6: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x.ed6 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.988: = impl_witness @Adapter.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.0f9: type = ptr_type %Adapter [concrete] -// CHECK:STDOUT: %pattern_type.20f: type = pattern_type %ptr.0f9 [concrete] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.type: type = fn_type @Adapter.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op: %Adapter.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -822,51 +622,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Adapter.decl: type = class_decl @Adapter [concrete = constants.%Adapter] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc7_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc7_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc7_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc7_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Adapter.as.Destroy.impl: @Adapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.decl: %Adapter.as.Destroy.impl.Op.type = fn_decl @Adapter.as.Destroy.impl.Op [concrete = constants.%Adapter.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.20f = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.20f = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.0f9 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapter [concrete = constants.%Adapter] -// CHECK:STDOUT: %self: %ptr.0f9 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Adapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Adapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc7_9.2: type) { // CHECK:STDOUT: %T.loc7_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_9.1 (constants.%T)] // CHECK:STDOUT: @@ -880,10 +635,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc7_9.2 [symbolic = %T.loc7_9.1 (constants.%T)] // CHECK:STDOUT: %.loc8: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] // CHECK:STDOUT: %complete_type.loc9_1.1: = complete_type_witness constants.%struct_type.x.2ac [symbolic = %complete_type.loc9_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc9_1.1 // CHECK:STDOUT: @@ -900,10 +651,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %C: type = class_type @C, @C(constants.%i32) [concrete = constants.%C.98a] // CHECK:STDOUT: adapt_decl %C [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapter [concrete = constants.%Adapter] -// CHECK:STDOUT: impl_decl @Adapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Adapter.as.Destroy.impl.%Adapter.as.Destroy.impl.Op.decl), @Adapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.988] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x.ed6 [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -913,36 +660,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: extend %C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc7_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Adapter.as.Destroy.impl.Op(%self.param: %ptr.0f9) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { // CHECK:STDOUT: %T.loc7_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.4c2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { // CHECK:STDOUT: %T.loc7_9.1 => constants.%i32 // CHECK:STDOUT: @@ -996,7 +717,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//extend_adapt_specific_type_library, inst29 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.262: @C.%C.elem (%C.elem.66c) = import_ref Main//extend_adapt_specific_type_library, loc8_8, loaded [concrete = %.22b] // CHECK:STDOUT: %Main.import_ref.709: = import_ref Main//extend_adapt_specific_type_library, loc13_1, loaded [concrete = constants.%complete_type.c07] -// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//extend_adapt_specific_type_library, inst94 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//extend_adapt_specific_type_library, inst44 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.19d12e.2: type = import_ref Main//extend_adapt_specific_type_library, loc12_21, loaded [concrete = constants.%C.239] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %.22b: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] @@ -1091,13 +812,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Adapter.generic: %Adapter.type = struct_value () [concrete] // CHECK:STDOUT: %Adapter.0e3: type = class_type @Adapter, @Adapter(%T.8b3) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T.8b3 [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Adapter.%Destroy.impl_witness_table, @Adapter.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %ptr.36c: type = ptr_type %Adapter.0e3 [symbolic] -// CHECK:STDOUT: %pattern_type.aa7: type = pattern_type %ptr.36c [symbolic] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.type: type = fn_type @Adapter.as.Destroy.impl.Op, @Adapter.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op: %Adapter.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %complete_type.f87: = complete_type_witness %T.8b3 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] @@ -1126,13 +840,11 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] @@ -1173,35 +885,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Adapter.as.Destroy.impl(@Adapter.%T.loc4_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %Adapter: type = class_type @Adapter, @Adapter(%T) [symbolic = %Adapter (constants.%Adapter.0e3)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Adapter.%Destroy.impl_witness_table, @Adapter.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.type: type = fn_type @Adapter.as.Destroy.impl.Op, @Adapter.as.Destroy.impl(%T) [symbolic = %Adapter.as.Destroy.impl.Op.type (constants.%Adapter.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op: @Adapter.as.Destroy.impl.%Adapter.as.Destroy.impl.Op.type (%Adapter.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Adapter.as.Destroy.impl.Op (constants.%Adapter.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Adapter.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Adapter.as.Destroy.impl.Op.decl: @Adapter.as.Destroy.impl.%Adapter.as.Destroy.impl.Op.type (%Adapter.as.Destroy.impl.Op.type) = fn_decl @Adapter.as.Destroy.impl.Op [symbolic = @Adapter.as.Destroy.impl.%Adapter.as.Destroy.impl.Op (constants.%Adapter.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Adapter.as.Destroy.impl.Op.%pattern_type (%pattern_type.aa7) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Adapter.as.Destroy.impl.Op.%pattern_type (%pattern_type.aa7) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Adapter.as.Destroy.impl.Op.%ptr (%ptr.36c) = value_param call_param0 -// CHECK:STDOUT: %.loc4_25.2: type = splice_block %Self.ref [symbolic = %Adapter (constants.%Adapter.0e3)] { -// CHECK:STDOUT: %.loc4_25.3: type = specific_constant constants.%Adapter.0e3, @Adapter(constants.%T.8b3) [symbolic = %Adapter (constants.%Adapter.0e3)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_25.3 [symbolic = %Adapter (constants.%Adapter.0e3)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Adapter.as.Destroy.impl.Op.%ptr (%ptr.36c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Adapter.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Adapter.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Adapter(%T.loc4_15.2: type) { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.1 (constants.%T.8b3)] // CHECK:STDOUT: @@ -1212,10 +895,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_15.2 [symbolic = %T.loc4_15.1 (constants.%T.8b3)] // CHECK:STDOUT: adapt_decl %T.ref [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Adapter.0e3 [symbolic = @Adapter.as.Destroy.impl.%Adapter (constants.%Adapter.0e3)] -// CHECK:STDOUT: impl_decl @Adapter.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Adapter.as.Destroy.impl.%Adapter.as.Destroy.impl.Op.decl), @Adapter.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Adapter.as.Destroy.impl(constants.%T.8b3) [symbolic = @Adapter.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness constants.%T.8b3 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.f87)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 // CHECK:STDOUT: @@ -1225,17 +904,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Adapter.as.Destroy.impl.Op(@Adapter.%T.loc4_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %Adapter: type = class_type @Adapter, @Adapter(%T) [symbolic = %Adapter (constants.%Adapter.0e3)] -// CHECK:STDOUT: %ptr: type = ptr_type %Adapter [symbolic = %ptr (constants.%ptr.36c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.aa7)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Adapter.as.Destroy.impl.Op.%ptr (%ptr.36c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @Convert(%a.param: %Adapter.e4c) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %Adapter.e4c = name_ref a, %a @@ -1255,19 +923,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %T.loc4_15.1 => constants.%T.8b3 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Adapter.as.Destroy.impl(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %Adapter => constants.%Adapter.0e3 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Adapter.as.Destroy.impl.Op(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %Adapter => constants.%Adapter.0e3 -// CHECK:STDOUT: %ptr => constants.%ptr.36c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.aa7 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Adapter(constants.%i32) { // CHECK:STDOUT: %T.loc4_15.1 => constants.%i32 // CHECK:STDOUT: @@ -1309,13 +964,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %Adapter.58f: type = class_type @Adapter, @Adapter(%C) [concrete] @@ -1331,7 +979,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -1342,7 +989,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -1396,22 +1042,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Adapter(imports.%Main.import_ref.5ab: type) [from "adapt_generic_type.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] // CHECK:STDOUT: @@ -1431,10 +1061,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc11: %C.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1458,8 +1084,6 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ImportedConvertLocal(%a.param: %Adapter.58f) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %Adapter.58f = name_ref a, %a diff --git a/toolchain/check/testdata/class/generic/base_is_generic.carbon b/toolchain/check/testdata/class/generic/base_is_generic.carbon index 1ad5cd1421af..7d8eb9012e72 100644 --- a/toolchain/check/testdata/class/generic/base_is_generic.carbon +++ b/toolchain/check/testdata/class/generic/base_is_generic.carbon @@ -101,13 +101,6 @@ fn H() { // CHECK:STDOUT: %Base.370: type = class_type @Base, @Base(%T.8b3) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T.8b3 [symbolic] // CHECK:STDOUT: %Base.elem.9af: type = unbound_element_type %Base.370, %T.8b3 [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.87c: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %ptr.b7c: type = ptr_type %Base.370 [symbolic] -// CHECK:STDOUT: %pattern_type.8d4: type = pattern_type %ptr.b7c [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T.8b3} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x.2ac [symbolic] // CHECK:STDOUT: %Param: type = class_type @Param [concrete] @@ -117,11 +110,6 @@ fn H() { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Param.elem: type = unbound_element_type %Param, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.31d: = impl_witness @Param.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.756: type = ptr_type %Param [concrete] -// CHECK:STDOUT: %pattern_type.fae: type = pattern_type %ptr.756 [concrete] -// CHECK:STDOUT: %Param.as.Destroy.impl.Op.type: type = fn_type @Param.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Param.as.Destroy.impl.Op: %Param.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %i32} [concrete] // CHECK:STDOUT: %complete_type.0f9: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] @@ -130,11 +118,6 @@ fn H() { // CHECK:STDOUT: %struct_type.x.975: type = struct_type {.x: %Param} [concrete] // CHECK:STDOUT: %complete_type.db3: = complete_type_witness %struct_type.x.975 [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base.7a8 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.8bc: type = struct_type {.base: %Base.7a8} [concrete] // CHECK:STDOUT: %complete_type.b07: = complete_type_witness %struct_type.base.8bc [concrete] // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] @@ -155,13 +138,11 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] @@ -201,67 +182,6 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Base.as.Destroy.impl(@Base.%T.loc4_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic = %Base.as.Destroy.impl.Op.type (constants.%Base.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = fn_decl @Base.as.Destroy.impl.Op [symbolic = @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_27.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = value_param call_param0 -// CHECK:STDOUT: %.loc4_27.2: type = splice_block %Self.ref [symbolic = %Base (constants.%Base.370)] { -// CHECK:STDOUT: %.loc4_27.3: type = specific_constant constants.%Base.370, @Base(constants.%T.8b3) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_27.3 [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Param.as.Destroy.impl: @Param.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Param.as.Destroy.impl.Op.decl: %Param.as.Destroy.impl.Op.type = fn_decl @Param.as.Destroy.impl.Op [concrete = constants.%Param.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.fae = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.fae = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.756 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Param [concrete = constants.%Param] -// CHECK:STDOUT: %self: %ptr.756 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Param.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Param.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_17.2: type) { // CHECK:STDOUT: %T.loc4_17.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.1 (constants.%T.8b3)] // CHECK:STDOUT: @@ -275,10 +195,6 @@ fn H() { // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_17.2 [symbolic = %T.loc4_17.1 (constants.%T.8b3)] // CHECK:STDOUT: %.loc5: @Base.%Base.elem (%Base.elem.9af) = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base.370 [symbolic = @Base.as.Destroy.impl.%Base (constants.%Base.370)] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Base.as.Destroy.impl(constants.%T.8b3) [symbolic = @Base.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness constants.%struct_type.x.2ac [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 // CHECK:STDOUT: @@ -293,10 +209,6 @@ fn H() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc9: %Param.elem = field_decl y, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Param [concrete = constants.%Param] -// CHECK:STDOUT: impl_decl @Param.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Param.as.Destroy.impl.%Param.as.Destroy.impl.Op.decl), @Param.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.31d] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.y [concrete = constants.%complete_type.0f9] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -310,10 +222,6 @@ fn H() { // CHECK:STDOUT: %Param.ref: type = name_ref Param, file.%Param.decl [concrete = constants.%Param] // CHECK:STDOUT: %Base: type = class_type @Base, @Base(constants.%Param) [concrete = constants.%Base.7a8] // CHECK:STDOUT: %.loc13: %Derived.elem = base_decl %Base, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.8bc [concrete = constants.%complete_type.b07] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -326,21 +234,6 @@ fn H() { // CHECK:STDOUT: extend %Base // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.as.Destroy.impl.Op(@Base.%T.loc4_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %ptr: type = ptr_type %Base [symbolic = %ptr (constants.%ptr.b7c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8d4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Param.as.Destroy.impl.Op(%self.param: %ptr.756) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @DoubleFieldAccess(%d.param: %Derived) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d @@ -363,19 +256,6 @@ fn H() { // CHECK:STDOUT: %T.loc4_17.1 => constants.%T.8b3 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.87c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl.Op(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %ptr => constants.%ptr.b7c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d4 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%Param) { // CHECK:STDOUT: %T.loc4_17.1 => constants.%Param // CHECK:STDOUT: @@ -440,14 +320,14 @@ fn H() { // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.e8d: = import_ref Main//extend_generic_base, loc10_1, loaded [concrete = constants.%complete_type.09d] -// CHECK:STDOUT: %Main.import_ref.446 = import_ref Main//extend_generic_base, inst94 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.446 = import_ref Main//extend_generic_base, inst44 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.a92: %Param.elem = import_ref Main//extend_generic_base, loc9_8, loaded [concrete = %.be7] // CHECK:STDOUT: %Main.import_ref.5ab: type = import_ref Main//extend_generic_base, loc4_17, loaded [symbolic = @Base.%T (constants.%T.8b3)] // CHECK:STDOUT: %Main.import_ref.b5f: = import_ref Main//extend_generic_base, loc6_1, loaded [symbolic = @Base.%complete_type (constants.%complete_type.433)] // CHECK:STDOUT: %Main.import_ref.8e0 = import_ref Main//extend_generic_base, inst29 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.7f7: @Base.%Base.elem (%Base.elem.9af) = import_ref Main//extend_generic_base, loc5_8, loaded [concrete = %.e66] // CHECK:STDOUT: %Main.import_ref.bd0: = import_ref Main//extend_generic_base, loc14_1, loaded [concrete = constants.%complete_type.b07] -// CHECK:STDOUT: %Main.import_ref.f6c = import_ref Main//extend_generic_base, inst144 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.f6c = import_ref Main//extend_generic_base, inst77 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.d24 = import_ref Main//extend_generic_base, loc13_27, unloaded // CHECK:STDOUT: %Main.import_ref.77a301.2: type = import_ref Main//extend_generic_base, loc13_26, loaded [concrete = constants.%Base.7a8] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] @@ -561,26 +441,14 @@ fn H() { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.4c2: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %X.G.type: type = fn_type @X.G [concrete] // CHECK:STDOUT: %X.G: %X.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7d5: = impl_witness @X.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.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: %F.type: type = fn_type @F [concrete] @@ -590,11 +458,9 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -606,7 +472,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.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T)] @@ -615,51 +481,6 @@ fn H() { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc4_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc4_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @X.as.Destroy.impl: @X.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %X.as.Destroy.impl.Op.decl: %X.as.Destroy.impl.Op.type = fn_decl @X.as.Destroy.impl.Op [concrete = constants.%X.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1c6 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1c6 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d17 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: %self: %ptr.d17 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %X.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @X.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.2: type) { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: @@ -669,10 +490,6 @@ fn H() { // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_9.2 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: %.loc9: = base_decl , element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] // CHECK:STDOUT: %complete_type: = complete_type_witness [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -687,10 +504,6 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: class @X { // CHECK:STDOUT: %X.G.decl: %X.G.type = fn_decl @X.G [concrete = constants.%X.G] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: impl_decl @X.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@X.as.Destroy.impl.%X.as.Destroy.impl.Op.decl), @X.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.7d5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -699,24 +512,11 @@ fn H() { // CHECK:STDOUT: .G = %X.G.decl // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @X.G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @X.as.Destroy.impl.Op(%self.param: %ptr.d17) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] @@ -730,19 +530,6 @@ fn H() { // CHECK:STDOUT: %T.loc4_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.4c2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%X) { // CHECK:STDOUT: %T.loc4_9.1 => constants.%X // CHECK:STDOUT: @@ -763,13 +550,6 @@ fn H() { // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %U [symbolic] // CHECK:STDOUT: %X.G.type.56f312.1: type = fn_type @X.G, @X(%U) [symbolic] // CHECK:STDOUT: %X.G.b504c4.1: %X.G.type.56f312.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.53c: = impl_witness @X.%Destroy.impl_witness_table, @X.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %ptr.428: type = ptr_type %X.75b6d8.1 [symbolic] -// CHECK:STDOUT: %pattern_type.d72: type = pattern_type %ptr.428 [symbolic] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op, @X.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = 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.4ae: = require_complete_type %U [symbolic] @@ -783,11 +563,6 @@ fn H() { // CHECK:STDOUT: %X.G.b504c4.2: %X.G.type.56f312.2 = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.441: = require_complete_type %X.75b6d8.2 [symbolic] // CHECK:STDOUT: %C.elem.3f4: type = unbound_element_type %C.f2e, %X.75b6d8.2 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.4c2: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.base.f5f: type = struct_type {.base: %X.75b6d8.2} [symbolic] // CHECK:STDOUT: %complete_type.768: = complete_type_witness %struct_type.base.f5f [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -811,12 +586,10 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -843,64 +616,6 @@ fn H() { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @X.as.Destroy.impl(@X.%U.loc4_14.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %X: type = class_type @X, @X(%U) [symbolic = %X (constants.%X.75b6d8.1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @X.%Destroy.impl_witness_table, @X.as.Destroy.impl(%U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.53c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op, @X.as.Destroy.impl(%U) [symbolic = %X.as.Destroy.impl.Op.type (constants.%X.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: @X.as.Destroy.impl.%X.as.Destroy.impl.Op.type (%X.as.Destroy.impl.Op.type) = struct_value () [symbolic = %X.as.Destroy.impl.Op (constants.%X.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @X.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %X.as.Destroy.impl.Op.decl: @X.as.Destroy.impl.%X.as.Destroy.impl.Op.type (%X.as.Destroy.impl.Op.type) = fn_decl @X.as.Destroy.impl.Op [symbolic = @X.as.Destroy.impl.%X.as.Destroy.impl.Op (constants.%X.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @X.as.Destroy.impl.Op.%pattern_type (%pattern_type.d72) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @X.as.Destroy.impl.Op.%pattern_type (%pattern_type.d72) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_24.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @X.as.Destroy.impl.Op.%ptr (%ptr.428) = value_param call_param0 -// CHECK:STDOUT: %.loc4_24.2: type = splice_block %Self.ref [symbolic = %X (constants.%X.75b6d8.1)] { -// CHECK:STDOUT: %.loc4_24.3: type = specific_constant constants.%X.75b6d8.1, @X(constants.%U) [symbolic = %X (constants.%X.75b6d8.1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_24.3 [symbolic = %X (constants.%X.75b6d8.1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @X.as.Destroy.impl.Op.%ptr (%ptr.428) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %X.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @X.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc8_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc8_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc8_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc8_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @X(%U.loc4_14.2: type) { // CHECK:STDOUT: %U.loc4_14.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc4_14.1 (constants.%U)] // CHECK:STDOUT: @@ -917,10 +632,6 @@ fn H() { // CHECK:STDOUT: %return.param: ref @X.G.%U (%U) = out_param call_param0 // CHECK:STDOUT: %return: ref @X.G.%U (%U) = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X.75b6d8.1 [symbolic = @X.as.Destroy.impl.%X (constants.%X.75b6d8.1)] -// CHECK:STDOUT: impl_decl @X.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@X.as.Destroy.impl.%X.as.Destroy.impl.Op.decl), @X.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @X.as.Destroy.impl(constants.%U) [symbolic = @X.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.53c)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -947,10 +658,6 @@ fn H() { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_9.2 [symbolic = %T.loc8_9.1 (constants.%T)] // CHECK:STDOUT: %X.loc9_19.1: type = class_type @X, @X(constants.%T) [symbolic = %X.loc9_19.2 (constants.%X.75b6d8.2)] // CHECK:STDOUT: %.loc9: @C.%C.elem (%C.elem.3f4) = base_decl %X.loc9_19.1, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] // CHECK:STDOUT: %complete_type.loc10_1.1: = complete_type_witness constants.%struct_type.base.f5f [symbolic = %complete_type.loc10_1.2 (constants.%complete_type.768)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc10_1.1 // CHECK:STDOUT: @@ -985,28 +692,6 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @X.as.Destroy.impl.Op(@X.%U.loc4_14.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %X: type = class_type @X, @X(%U) [symbolic = %X (constants.%X.75b6d8.1)] -// CHECK:STDOUT: %ptr: type = ptr_type %X [symbolic = %ptr (constants.%ptr.428)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d72)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @X.as.Destroy.impl.Op.%ptr (%ptr.428)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc8_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -1049,19 +734,6 @@ fn H() { // CHECK:STDOUT: %X.G.specific_fn.loc5_24.2 => constants.%X.G.specific_fn.169 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @X.as.Destroy.impl(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %X => constants.%X.75b6d8.1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.53c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @X.as.Destroy.impl.Op(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %X => constants.%X.75b6d8.1 -// CHECK:STDOUT: %ptr => constants.%ptr.428 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d72 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { // CHECK:STDOUT: %T.loc8_9.1 => constants.%T // CHECK:STDOUT: } @@ -1074,19 +746,6 @@ fn H() { // CHECK:STDOUT: %X.G => constants.%X.G.b504c4.2 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.4c2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { // CHECK:STDOUT: %T.loc8_9.1 => constants.%i32 // CHECK:STDOUT: @@ -1175,7 +834,7 @@ fn H() { // CHECK:STDOUT: %Main.import_ref.b8a: @X.%X.G.type (%X.G.type.56f312.1) = import_ref Main//extend_generic_symbolic_base, loc5_15, loaded [symbolic = @X.%X.G (constants.%X.G.b504c4.1)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//extend_generic_symbolic_base, loc8_9, loaded [symbolic = @C.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.93f: = import_ref Main//extend_generic_symbolic_base, loc10_1, loaded [symbolic = @C.%complete_type (constants.%complete_type.768)] -// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//extend_generic_symbolic_base, inst118 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//extend_generic_symbolic_base, inst68 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.65d = import_ref Main//extend_generic_symbolic_base, loc9_20, unloaded // CHECK:STDOUT: %Main.import_ref.561eb2.2: type = import_ref Main//extend_generic_symbolic_base, loc9_19, loaded [symbolic = @C.%X (constants.%X.75b6d8.2)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//extend_generic_symbolic_base, loc4_14, loaded [symbolic = @X.%U (constants.%U)] diff --git a/toolchain/check/testdata/class/generic/basic.carbon b/toolchain/check/testdata/class/generic/basic.carbon index 9580da8ed845..b933b1bbc49e 100644 --- a/toolchain/check/testdata/class/generic/basic.carbon +++ b/toolchain/check/testdata/class/generic/basic.carbon @@ -53,10 +53,6 @@ class Declaration(T:! type); // CHECK:STDOUT: %Class.GetValue: %Class.GetValue.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.07c: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [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] // CHECK:STDOUT: %require_complete.dd9: = require_complete_type %ptr.f3f [symbolic] @@ -81,12 +77,10 @@ class Declaration(T:! type); // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // 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.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -108,35 +102,6 @@ class Declaration(T:! type); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc5_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.e8f) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.e8f) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_28.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.818) = value_param call_param0 -// CHECK:STDOUT: %.loc5_28.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc5_28.3: type = specific_constant constants.%Class, @Class(constants.%T.be8) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_28.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.818) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc5_13.2: %Copy.type) { // CHECK:STDOUT: %T.loc5_13.1: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.1 (constants.%T.be8)] // CHECK:STDOUT: @@ -196,10 +161,6 @@ class Declaration(T:! type); // CHECK:STDOUT: %T.as_type.loc14_10.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc14_10.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc14_10: type = converted %T.ref, %T.as_type.loc14_10.1 [symbolic = %T.as_type.loc14_10.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc14_8: @Class.%Class.elem (%Class.elem) = field_decl k, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T.be8) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type.loc15_1.1: = complete_type_witness constants.%struct_type.k [symbolic = %complete_type.loc15_1.2 (constants.%complete_type)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc15_1.1 // CHECK:STDOUT: @@ -286,17 +247,6 @@ class Declaration(T:! type); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc5_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.818)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.e8f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.818)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.be8) { // CHECK:STDOUT: %T.loc5_13.1 => constants.%T.be8 // CHECK:STDOUT: @@ -331,19 +281,6 @@ class Declaration(T:! type); // CHECK:STDOUT: %pattern_type.loc10_29 => constants.%pattern_type.965801.1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.818 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e8f -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Declaration(constants.%T.8b3) { // CHECK:STDOUT: %T.loc17_19.1 => constants.%T.8b3 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/generic/call.carbon b/toolchain/check/testdata/class/generic/call.carbon index 2271a4a72c87..8952803c1fb6 100644 --- a/toolchain/check/testdata/class/generic/call.carbon +++ b/toolchain/check/testdata/class/generic/call.carbon @@ -107,13 +107,6 @@ class Outer(T:! type) { // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class.ab2: type = class_type @Class, @Class(%T, %N.356) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T, %N.356) [symbolic] -// CHECK:STDOUT: %ptr.770: type = ptr_type %Class.ab2 [symbolic] -// CHECK:STDOUT: %pattern_type.b96: type = pattern_type %ptr.770 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T, %N.356) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = 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: %ptr.235: type = ptr_type %i32 [concrete] @@ -147,13 +140,11 @@ class Outer(T:! type) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -223,36 +214,6 @@ class Outer(T:! type) { // CHECK:STDOUT: %b: ref %Class.dd4 = bind_name b, %b.var [concrete = %b.var] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc4_13.2: type, @Class.%N.loc4_23.2: %i32) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.356)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N) [symbolic = %Class (constants.%Class.ab2)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T, %N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T, %N) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.b96) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.b96) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_32.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.770) = value_param call_param0 -// CHECK:STDOUT: %.loc4_32.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class.ab2)] { -// CHECK:STDOUT: %.loc4_32.3: type = specific_constant constants.%Class.ab2, @Class(constants.%T, constants.%N.356) [symbolic = %Class (constants.%Class.ab2)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_32.3 [symbolic = %Class (constants.%Class.ab2)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.770) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.2: type, %N.loc4_23.2: %i32) { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.1 (constants.%T)] // CHECK:STDOUT: %N.loc4_23.1: %i32 = bind_symbolic_name N, 1 [symbolic = %N.loc4_23.1 (constants.%N.356)] @@ -260,10 +221,6 @@ class Outer(T:! type) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class.ab2 [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class.ab2)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T, constants.%N.356) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -272,38 +229,11 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc4_13.2: type, @Class.%N.loc4_23.2: %i32) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.356)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N) [symbolic = %Class (constants.%Class.ab2)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.770)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.b96)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.770)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.356) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%T // CHECK:STDOUT: %N.loc4_23.1 => constants.%N.356 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T, constants.%N.356) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.356 -// CHECK:STDOUT: %Class => constants.%Class.ab2 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T, constants.%N.356) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.356 -// CHECK:STDOUT: %Class => constants.%Class.ab2 -// CHECK:STDOUT: %ptr => constants.%ptr.770 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b96 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%ptr.235, constants.%int_5.0f6) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%ptr.235 // CHECK:STDOUT: %N.loc4_23.1 => constants.%int_5.0f6 @@ -334,27 +264,18 @@ class Outer(T:! type) { // 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, %N.356) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T, %N.356) [symbolic] -// CHECK:STDOUT: %ptr.770: type = ptr_type %Class [symbolic] -// CHECK:STDOUT: %pattern_type.b96: type = pattern_type %ptr.770 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T, %N.356) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = 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: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -386,41 +307,11 @@ class Outer(T:! type) { // CHECK:STDOUT: %Class.ref: %Class.type = name_ref Class, %Class.decl [concrete = constants.%Class.generic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] -// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete = constants.%ptr.235] +// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %a: = bind_name a, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc4_13.2: type, @Class.%N.loc4_23.2: %i32) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.356)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T, %N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T, %N) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.b96) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.b96) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_32.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.770) = value_param call_param0 -// CHECK:STDOUT: %.loc4_32.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc4_32.3: type = specific_constant constants.%Class, @Class(constants.%T, constants.%N.356) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_32.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.770) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.2: type, %N.loc4_23.2: %i32) { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.1 (constants.%T)] // CHECK:STDOUT: %N.loc4_23.1: %i32 = bind_symbolic_name N, 1 [symbolic = %N.loc4_23.1 (constants.%N.356)] @@ -428,10 +319,6 @@ class Outer(T:! type) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T, constants.%N.356) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -440,38 +327,11 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc4_13.2: type, @Class.%N.loc4_23.2: %i32) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.356)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.770)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.b96)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.770)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.356) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%T // CHECK:STDOUT: %N.loc4_23.1 => constants.%N.356 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T, constants.%N.356) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.356 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T, constants.%N.356) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.356 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.770 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b96 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_too_many.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -488,16 +348,9 @@ class Outer(T:! type) { // 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, %N.356) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T, %N.356) [symbolic] -// CHECK:STDOUT: %ptr.770: type = ptr_type %Class [symbolic] -// CHECK:STDOUT: %pattern_type.b96: type = pattern_type %ptr.770 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T, %N.356) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = 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: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: } @@ -505,12 +358,10 @@ class Outer(T:! type) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -542,43 +393,13 @@ class Outer(T:! type) { // CHECK:STDOUT: %Class.ref: %Class.type = name_ref Class, %Class.decl [concrete = constants.%Class.generic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] -// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete = constants.%ptr.235] +// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete = constants.%ptr] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2] // CHECK:STDOUT: } // CHECK:STDOUT: %a: = bind_name a, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc4_13.2: type, @Class.%N.loc4_23.2: %i32) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.356)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T, %N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T, %N) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.b96) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.b96) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_32.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.770) = value_param call_param0 -// CHECK:STDOUT: %.loc4_32.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc4_32.3: type = specific_constant constants.%Class, @Class(constants.%T, constants.%N.356) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_32.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.770) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.2: type, %N.loc4_23.2: %i32) { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.1 (constants.%T)] // CHECK:STDOUT: %N.loc4_23.1: %i32 = bind_symbolic_name N, 1 [symbolic = %N.loc4_23.1 (constants.%N.356)] @@ -586,10 +407,6 @@ class Outer(T:! type) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T, constants.%N.356) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -598,38 +415,11 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc4_13.2: type, @Class.%N.loc4_23.2: %i32) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.356)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.770)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.b96)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.770)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.356) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%T // CHECK:STDOUT: %N.loc4_23.1 => constants.%N.356 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T, constants.%N.356) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.356 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T, constants.%N.356) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.356 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.770 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b96 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_no_conversion.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -646,17 +436,10 @@ class Outer(T:! type) { // 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, %N.356) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T, %N.356) [symbolic] -// CHECK:STDOUT: %ptr.770: type = ptr_type %Class [symbolic] -// CHECK:STDOUT: %pattern_type.b96: type = pattern_type %ptr.770 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T, %N.356) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = 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: %int_5: Core.IntLiteral = int_value 5 [concrete] -// CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: } @@ -664,13 +447,11 @@ class Outer(T:! type) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -704,42 +485,12 @@ class Outer(T:! type) { // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] -// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete = constants.%ptr.235] +// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete = constants.%ptr] // CHECK:STDOUT: %.loc16: type = converted %int_5, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: %a: = bind_name a, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc4_13.2: type, @Class.%N.loc4_23.2: %i32) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.356)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T, %N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T, %N) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.b96) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.b96) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_32.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.770) = value_param call_param0 -// CHECK:STDOUT: %.loc4_32.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc4_32.3: type = specific_constant constants.%Class, @Class(constants.%T, constants.%N.356) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_32.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.770) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.2: type, %N.loc4_23.2: %i32) { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.1 (constants.%T)] // CHECK:STDOUT: %N.loc4_23.1: %i32 = bind_symbolic_name N, 1 [symbolic = %N.loc4_23.1 (constants.%N.356)] @@ -747,10 +498,6 @@ class Outer(T:! type) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T, constants.%N.356) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -759,38 +506,11 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc4_13.2: type, @Class.%N.loc4_23.2: %i32) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.356)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.770)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.b96)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.770)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T, constants.%N.356) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%T // CHECK:STDOUT: %N.loc4_23.1 => constants.%N.356 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T, constants.%N.356) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.356 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T, constants.%N.356) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.356 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.770 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b96 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- call_in_nested_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -819,20 +539,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %pattern_type.372: type = pattern_type %Inner.c71 [symbolic] // CHECK:STDOUT: %Inner.D.type.102: type = fn_type @Inner.D, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %Inner.D.d85: %Inner.D.type.102 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7f3: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%T, %U) [symbolic] -// CHECK:STDOUT: %ptr.276: type = ptr_type %Inner.c71 [symbolic] -// CHECK:STDOUT: %pattern_type.01f: type = pattern_type %ptr.276 [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%T, %U) [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: %Inner.as.Destroy.impl.Op.type = 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: %Destroy.impl_witness.52f: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.6ff: type = ptr_type %Outer.9d6 [symbolic] -// CHECK:STDOUT: %pattern_type.07e: type = pattern_type %ptr.6ff [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.127: = require_complete_type %Outer.9d6 [symbolic] // CHECK:STDOUT: %Outer.val.234: %Outer.9d6 = struct_value () [symbolic] // CHECK:STDOUT: %Inner.type.a71: type = generic_class_type @Inner, @Outer(%U) [symbolic] @@ -855,11 +563,9 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -876,65 +582,6 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Inner.as.Destroy.impl(@Outer.%T.loc2_13.2: type, @Inner.%U.loc3_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T, %U) [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%T, %U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.7f3)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%T, %U) [symbolic = %Inner.as.Destroy.impl.Op.type (constants.%Inner.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Inner.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.decl: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type) = fn_decl @Inner.as.Destroy.impl.Op [symbolic = @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.01f) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.01f) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.276) = value_param call_param0 -// CHECK:STDOUT: %.loc3_25.2: type = splice_block %Self.ref [symbolic = %Inner (constants.%Inner.c71)] { -// CHECK:STDOUT: %.loc3_25.3: type = specific_constant constants.%Inner.c71, @Inner(constants.%T, constants.%U) [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc3_25.3 [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Inner.as.Destroy.impl.Op.%ptr (%ptr.276) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Inner.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Inner.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Outer.as.Destroy.impl(@Outer.%T.loc2_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.52f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T) [symbolic = %Outer.as.Destroy.impl.Op.type (constants.%Outer.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = fn_decl @Outer.as.Destroy.impl.Op [symbolic = @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc2_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = value_param call_param0 -// CHECK:STDOUT: %.loc2_23.2: type = splice_block %Self.ref [symbolic = %Outer (constants.%Outer.9d6)] { -// CHECK:STDOUT: %.loc2_23.3: type = specific_constant constants.%Outer.9d6, @Outer(constants.%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc2_23.3 [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc2_13.2: type) { // CHECK:STDOUT: %T.loc2_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc2_13.1 (constants.%T)] // CHECK:STDOUT: @@ -949,10 +596,6 @@ class Outer(T:! type) { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %U.loc3_15.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc3_15.1 (constants.%U)] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer.9d6 [symbolic = @Outer.as.Destroy.impl.%Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Outer.as.Destroy.impl(constants.%T) [symbolic = @Outer.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.52f)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1021,10 +664,6 @@ class Outer(T:! type) { // CHECK:STDOUT: %return.param: ref @Inner.D.%Inner.loc13_22.1 (%Inner.c71) = out_param call_param0 // CHECK:STDOUT: %return: ref @Inner.D.%Inner.loc13_22.1 (%Inner.c71) = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner.c71 [symbolic = @Inner.as.Destroy.impl.%Inner (constants.%Inner.c71)] -// CHECK:STDOUT: impl_decl @Inner.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.decl), @Inner.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Inner.as.Destroy.impl(constants.%T, constants.%U) [symbolic = @Inner.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.7f3)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1118,29 +757,6 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Inner.as.Destroy.impl.Op(@Outer.%T.loc2_13.2: type, @Inner.%U.loc3_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T, %U) [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: %ptr: type = ptr_type %Inner [symbolic = %ptr (constants.%ptr.276)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.01f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.276)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Outer.as.Destroy.impl.Op(@Outer.%T.loc2_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %ptr: type = ptr_type %Outer [symbolic = %ptr (constants.%ptr.6ff)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.07e)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%T) { // CHECK:STDOUT: %T.loc2_13.1 => constants.%T // CHECK:STDOUT: @@ -1216,31 +832,3 @@ class Outer(T:! type) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.372 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl(constants.%T, constants.%U) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %Inner => constants.%Inner.c71 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.7f3 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl.Op(constants.%T, constants.%U) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %Inner => constants.%Inner.c71 -// CHECK:STDOUT: %ptr => constants.%ptr.276 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.01f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.52f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %ptr => constants.%ptr.6ff -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.07e -// 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 091bfd510107..5251c501fbfb 100644 --- a/toolchain/check/testdata/class/generic/complete_in_conversion.carbon +++ b/toolchain/check/testdata/class/generic/complete_in_conversion.carbon @@ -45,13 +45,6 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %Int.type.913: type = fn_type @Int.loc2 [concrete] // CHECK:STDOUT: %Int.779: %Int.type.913 = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -88,11 +81,6 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %iN.builtin.291: type = int_type signed, %Int.as.ImplicitAs.impl.Convert.call [symbolic] // CHECK:STDOUT: %require_complete.66e: = require_complete_type %iN.builtin.291 [symbolic] // CHECK:STDOUT: %A.elem.2aa: type = unbound_element_type %A.dd3, %iN.builtin.291 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.e78: = impl_witness @A.%Destroy.impl_witness_table, @A.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %ptr.72a: type = ptr_type %A.dd3 [symbolic] -// CHECK:STDOUT: %pattern_type.b2f: type = pattern_type %ptr.72a [symbolic] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op, @A.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.base.n: type = struct_type {.base: %B, .n: %iN.builtin.291} [symbolic] // CHECK:STDOUT: %complete_type.b1f: = complete_type_witness %struct_type.base.n [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -112,6 +100,8 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %pattern_type.213: type = pattern_type %ptr.b65 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] // CHECK:STDOUT: %A.elem.d81: type = unbound_element_type %A.6fc, %B [concrete] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound.b67: = bound_method %int_0.6a9, %Int.as.ImplicitAs.impl.Convert.b09 [concrete] // CHECK:STDOUT: %bound_method.275: = bound_method %int_0.6a9, %Int.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -120,14 +110,12 @@ fn F(a: A(0)*) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .IntLiteral = %Core.IntLiteral -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.IntLiteral: %IntLiteral.type = import_ref Core//prelude/parts/int_literal, IntLiteral, loaded [concrete = constants.%IntLiteral] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Int: %Int.type.878 = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] @@ -196,56 +184,7 @@ fn F(a: A(0)*) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @A.as.Destroy.impl(@A.%N.loc6_9.2: %i32) { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %A: type = class_type @A, @A(%N) [symbolic = %A (constants.%A.dd3)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.%Destroy.impl_witness_table, @A.as.Destroy.impl(%N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.e78)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op, @A.as.Destroy.impl(%N) [symbolic = %A.as.Destroy.impl.Op.type (constants.%A.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: @A.as.Destroy.impl.%A.as.Destroy.impl.Op.type (%A.as.Destroy.impl.Op.type) = struct_value () [symbolic = %A.as.Destroy.impl.Op (constants.%A.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: @A.as.Destroy.impl.%A.as.Destroy.impl.Op.type (%A.as.Destroy.impl.Op.type) = fn_decl @A.as.Destroy.impl.Op [symbolic = @A.as.Destroy.impl.%A.as.Destroy.impl.Op (constants.%A.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @A.as.Destroy.impl.Op.%pattern_type (%pattern_type.b2f) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @A.as.Destroy.impl.Op.%pattern_type (%pattern_type.b2f) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_18.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @A.as.Destroy.impl.Op.%ptr (%ptr.72a) = value_param call_param0 -// CHECK:STDOUT: %.loc6_18.2: type = splice_block %Self.ref [symbolic = %A (constants.%A.dd3)] { -// CHECK:STDOUT: %.loc6_18.3: type = specific_constant constants.%A.dd3, @A(constants.%N.51e) [symbolic = %A (constants.%A.dd3)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_18.3 [symbolic = %A (constants.%A.dd3)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @A.as.Destroy.impl.Op.%ptr (%ptr.72a) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -286,10 +225,6 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %.loc12_15.1: type = value_of_initializer %Int.call [symbolic = %iN.builtin (constants.%iN.builtin.291)] // CHECK:STDOUT: %.loc12_15.2: type = converted %Int.call, %.loc12_15.1 [symbolic = %iN.builtin (constants.%iN.builtin.291)] // CHECK:STDOUT: %.loc12_8: @A.%A.elem.loc12 (%A.elem.2aa) = field_decl n, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A.dd3 [symbolic = @A.as.Destroy.impl.%A (constants.%A.dd3)] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @A.as.Destroy.impl(constants.%N.51e) [symbolic = @A.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.e78)] // CHECK:STDOUT: %complete_type.loc13_1.1: = complete_type_witness constants.%struct_type.base.n [symbolic = %complete_type.loc13_1.2 (constants.%complete_type.b1f)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc13_1.1 // CHECK:STDOUT: @@ -306,19 +241,6 @@ fn F(a: A(0)*) { // CHECK:STDOUT: // CHECK:STDOUT: fn @Int.loc2(%N.param: Core.IntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @A.as.Destroy.impl.Op(@A.%N.loc6_9.2: %i32) { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %A: type = class_type @A, @A(%N) [symbolic = %A (constants.%A.dd3)] -// CHECK:STDOUT: %ptr: type = ptr_type %A [symbolic = %ptr (constants.%ptr.72a)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.b2f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @A.as.Destroy.impl.Op.%ptr (%ptr.72a)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %ptr.b65) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -341,19 +263,6 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %N.loc6_9.1 => constants.%N.51e // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @A.as.Destroy.impl(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %A => constants.%A.dd3 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.e78 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @A.as.Destroy.impl.Op(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %A => constants.%A.dd3 -// CHECK:STDOUT: %ptr => constants.%ptr.72a -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b2f -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%int_0.6a9) { // CHECK:STDOUT: %N.loc6_9.1 => constants.%int_0.6a9 // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/field.carbon b/toolchain/check/testdata/class/generic/field.carbon index d4525b40f36c..76fce5cb6336 100644 --- a/toolchain/check/testdata/class/generic/field.carbon +++ b/toolchain/check/testdata/class/generic/field.carbon @@ -42,13 +42,6 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %Class.fe1: type = class_type @Class, @Class(%T.8b3) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T.8b3 [symbolic] // CHECK:STDOUT: %Class.elem.e26: type = unbound_element_type %Class.fe1, %T.8b3 [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %ptr.955: type = ptr_type %Class.fe1 [symbolic] -// CHECK:STDOUT: %pattern_type.9e0: type = pattern_type %ptr.955 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T.8b3} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x.2ac [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -113,13 +106,11 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] @@ -210,35 +201,6 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc5_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class.fe1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = value_param call_param0 -// CHECK:STDOUT: %.loc5_23.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class.fe1)] { -// CHECK:STDOUT: %.loc5_23.3: type = specific_constant constants.%Class.fe1, @Class(constants.%T.8b3) [symbolic = %Class (constants.%Class.fe1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_23.3 [symbolic = %Class (constants.%Class.fe1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc5_13.2: type) { // CHECK:STDOUT: %T.loc5_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.1 (constants.%T.8b3)] // CHECK:STDOUT: @@ -252,10 +214,6 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc5_13.2 [symbolic = %T.loc5_13.1 (constants.%T.8b3)] // CHECK:STDOUT: %.loc6: @Class.%Class.elem (%Class.elem.e26) = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class.fe1 [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class.fe1)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T.8b3) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type.loc7_1.1: = complete_type_witness constants.%struct_type.x.2ac [symbolic = %complete_type.loc7_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc7_1.1 // CHECK:STDOUT: @@ -266,17 +224,6 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc5_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class.fe1)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.955)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.9e0)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param: %Class.247) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %c.ref: %Class.247 = name_ref c, %c @@ -359,19 +306,6 @@ fn H(U:! Core.Copy, c: Class(U)) -> U { // CHECK:STDOUT: %T.loc5_13.1 => constants.%T.8b3 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %Class => constants.%Class.fe1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %Class => constants.%Class.fe1 -// CHECK:STDOUT: %ptr => constants.%ptr.955 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9e0 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%i32) { // CHECK:STDOUT: %T.loc5_13.1 => constants.%i32 // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/import.carbon b/toolchain/check/testdata/class/generic/import.carbon index fb0229fd3aab..1978edf39366 100644 --- a/toolchain/check/testdata/class/generic/import.carbon +++ b/toolchain/check/testdata/class/generic/import.carbon @@ -109,13 +109,6 @@ class Class(U:! type) { // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @CompleteClass.%Destroy.impl_witness_table, @CompleteClass.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.5b4: type = ptr_type %CompleteClass.f97 [symbolic] -// CHECK:STDOUT: %pattern_type.1fe: type = pattern_type %ptr.5b4 [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op: %CompleteClass.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -144,13 +137,11 @@ class Class(U:! type) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -189,35 +180,6 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @CompleteClass.as.Destroy.impl(@CompleteClass.%T.loc6_21.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @CompleteClass.%Destroy.impl_witness_table, @CompleteClass.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T) [symbolic = %CompleteClass.as.Destroy.impl.Op.type (constants.%CompleteClass.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op: @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op.type (%CompleteClass.as.Destroy.impl.Op.type) = struct_value () [symbolic = %CompleteClass.as.Destroy.impl.Op (constants.%CompleteClass.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @CompleteClass.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.decl: @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op.type (%CompleteClass.as.Destroy.impl.Op.type) = fn_decl @CompleteClass.as.Destroy.impl.Op [symbolic = @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op (constants.%CompleteClass.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @CompleteClass.as.Destroy.impl.Op.%pattern_type (%pattern_type.1fe) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @CompleteClass.as.Destroy.impl.Op.%pattern_type (%pattern_type.1fe) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_31.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @CompleteClass.as.Destroy.impl.Op.%ptr (%ptr.5b4) = value_param call_param0 -// CHECK:STDOUT: %.loc6_31.2: type = splice_block %Self.ref [symbolic = %CompleteClass (constants.%CompleteClass.f97)] { -// CHECK:STDOUT: %.loc6_31.3: type = specific_constant constants.%CompleteClass.f97, @CompleteClass(constants.%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_31.3 [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @CompleteClass.as.Destroy.impl.Op.%ptr (%ptr.5b4) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %CompleteClass.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @CompleteClass.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.2: type) { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.1 (constants.%T)] // CHECK:STDOUT: @@ -246,10 +208,6 @@ class Class(U:! type) { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%CompleteClass.f97 [symbolic = @CompleteClass.as.Destroy.impl.%CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: impl_decl @CompleteClass.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op.decl), @CompleteClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @CompleteClass.as.Destroy.impl(constants.%T) [symbolic = @CompleteClass.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -276,17 +234,6 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @CompleteClass.as.Destroy.impl.Op(@CompleteClass.%T.loc6_21.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %ptr: type = ptr_type %CompleteClass [symbolic = %ptr (constants.%ptr.5b4)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1fe)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @CompleteClass.as.Destroy.impl.Op.%ptr (%ptr.5b4)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %CompleteClass.e9e; // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T) { @@ -305,19 +252,6 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass.F(constants.%T) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.f97 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.f97 -// CHECK:STDOUT: %ptr => constants.%ptr.5b4 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1fe -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%i32) { // CHECK:STDOUT: %T.loc6_21.1 => constants.%i32 // CHECK:STDOUT: } @@ -325,46 +259,34 @@ class Class(U:! type) { // CHECK:STDOUT: --- foo.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %CompleteClass.type: type = generic_class_type @CompleteClass [concrete] -// CHECK:STDOUT: %CompleteClass.generic: %CompleteClass.type = struct_value () [concrete] -// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] +// CHECK:STDOUT: %To: Core.IntLiteral = bind_symbolic_name To, 0 [symbolic] // 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: %struct_type.n.4d6: type = struct_type {.n: %i32} [concrete] -// CHECK:STDOUT: %complete_type.a68: = complete_type_witness %struct_type.n.4d6 [concrete] -// CHECK:STDOUT: %CompleteClass.f97: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic] -// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] -// CHECK:STDOUT: %CompleteClass.elem.9ef: type = unbound_element_type %CompleteClass.f97, %i32 [symbolic] -// CHECK:STDOUT: %CompleteClass.F.type.14f: type = fn_type @CompleteClass.F, @CompleteClass(%T) [symbolic] -// CHECK:STDOUT: %CompleteClass.F.874: %CompleteClass.F.type.14f = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.8e0: = impl_witness imports.%Destroy.impl_witness_table, @CompleteClass.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op: %CompleteClass.as.Destroy.impl.Op.type = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.5b4: type = ptr_type %CompleteClass.f97 [symbolic] -// CHECK:STDOUT: %pattern_type.1fe: type = pattern_type %ptr.5b4 [symbolic] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %To: Core.IntLiteral = bind_symbolic_name To, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.595: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.595 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ec: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.f13: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ec = struct_value () [symbolic] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] +// CHECK:STDOUT: %T: type = bind_symbolic_name 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.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.dab: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.955: type = ptr_type %Class [symbolic] -// CHECK:STDOUT: %pattern_type.9e0: type = pattern_type %ptr.955 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x [symbolic] +// CHECK:STDOUT: %CompleteClass.type: type = generic_class_type @CompleteClass [concrete] +// CHECK:STDOUT: %CompleteClass.generic: %CompleteClass.type = struct_value () [concrete] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %struct_type.n.4d6: type = struct_type {.n: %i32} [concrete] +// CHECK:STDOUT: %complete_type.a68: = complete_type_witness %struct_type.n.4d6 [concrete] +// CHECK:STDOUT: %CompleteClass.f97: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic] +// CHECK:STDOUT: %CompleteClass.elem.9ef: type = unbound_element_type %CompleteClass.f97, %i32 [symbolic] +// CHECK:STDOUT: %CompleteClass.F.type.14f: type = fn_type @CompleteClass.F, @CompleteClass(%T) [symbolic] +// CHECK:STDOUT: %CompleteClass.F.874: %CompleteClass.F.type.14f = struct_value () [symbolic] // CHECK:STDOUT: %CompleteClass.a06: type = class_type @CompleteClass, @CompleteClass(%i32) [concrete] // CHECK:STDOUT: %pattern_type.84b: type = pattern_type %CompleteClass.a06 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -391,30 +313,20 @@ class Class(U:! type) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.CompleteClass: %CompleteClass.type = import_ref Main//foo, CompleteClass, loaded [concrete = constants.%CompleteClass.generic] // CHECK:STDOUT: %Core.ece: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Main.import_ref.035 = import_ref Main//foo, loc6_31, unloaded -// CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] +// CHECK:STDOUT: %Main.import_ref.9fd: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ec) = import_ref Main//foo, inst144 [indirect], loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f13)] +// CHECK:STDOUT: %ImplicitAs.impl_witness_table.0a0 = impl_witness_table (%Main.import_ref.9fd), @Core.IntLiteral.as.ImplicitAs.impl [concrete] +// CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//foo, loc4_13, loaded [symbolic = @Class.%T.1 (constants.%T)] +// CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.eb1: = import_ref Main//foo, loc9_1, loaded [concrete = constants.%complete_type.a68] // CHECK:STDOUT: %Main.import_ref.3c0 = import_ref Main//foo, inst37 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.051 = import_ref Main//foo, loc7_8, unloaded // CHECK:STDOUT: %Main.import_ref.570 = import_ref Main//foo, loc8_17, unloaded -// CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.e27: type = import_ref Main//foo, loc6_31, loaded [symbolic = @CompleteClass.as.Destroy.impl.%CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %Main.import_ref.e45: type = import_ref Main//foo, inst82 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.9d098e.1 = import_ref Main//foo, loc6_31, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.9d098e.2 = import_ref Main//foo, loc6_31, unloaded -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (%Main.import_ref.9d098e.2), @CompleteClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Main.import_ref.5ab3ec.4: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.9fd: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ec) = import_ref Main//foo, inst194 [indirect], loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f13)] -// CHECK:STDOUT: %ImplicitAs.impl_witness_table.0a0 = impl_witness_table (%Main.import_ref.9fd), @Core.IntLiteral.as.ImplicitAs.impl [concrete] -// CHECK:STDOUT: %Main.import_ref.5ab3ec.5: type = import_ref Main//foo, loc4_13, loaded [symbolic = @Class.%T.1 (constants.%T)] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.595 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } @@ -448,52 +360,30 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @CompleteClass.as.Destroy.impl(imports.%Main.import_ref.5ab3ec.2: type) [from "foo.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table, @CompleteClass.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.8e0)] +// CHECK:STDOUT: generic class @Class(imports.%Main.import_ref.5ab3ec.1: type) { +// CHECK:STDOUT: %T.1: type = bind_symbolic_name T, 0 [symbolic = %T.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T) [symbolic = %CompleteClass.as.Destroy.impl.Op.type (constants.%CompleteClass.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op: @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op.type (%CompleteClass.as.Destroy.impl.Op.type) = struct_value () [symbolic = %CompleteClass.as.Destroy.impl.Op (constants.%CompleteClass.as.Destroy.impl.Op)] +// CHECK:STDOUT: %require_complete: = require_complete_type %T.1 [symbolic = %require_complete (constants.%require_complete.4ae)] +// 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)] +// CHECK:STDOUT: %complete_type.loc6_1.2: = complete_type_witness %struct_type.x [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] +// CHECK:STDOUT: +// CHECK:STDOUT: class { +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)] +// CHECK:STDOUT: %.loc5: @Class.%Class.elem (%Class.elem) = field_decl x, element0 [concrete] +// CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness constants.%struct_type.x [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] +// CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 // CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%Main.import_ref.e27 as imports.%Main.import_ref.e45 { // CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.9d098e.1 -// CHECK:STDOUT: witness = imports.%Main.import_ref.035 +// CHECK:STDOUT: .Self = constants.%Class +// CHECK:STDOUT: .T = +// CHECK:STDOUT: .x = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc4: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.dab)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = value_param call_param0 -// CHECK:STDOUT: %.loc4_23.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc4_23.3: type = specific_constant constants.%Class, @Class(constants.%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_23.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.5ab3ec.1: type) [from "foo.carbon"] { +// CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.5ab3ec.2: type) [from "foo.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -512,61 +402,12 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic class @Class(imports.%Main.import_ref.5ab3ec.5: type) { -// CHECK:STDOUT: %T.1: type = bind_symbolic_name 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.4ae)] -// 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)] -// CHECK:STDOUT: %complete_type.loc6_1.2: = complete_type_witness %struct_type.x [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] -// CHECK:STDOUT: -// CHECK:STDOUT: class { -// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)] -// CHECK:STDOUT: %.loc5: @Class.%Class.elem (%Class.elem) = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.dab)] -// CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness constants.%struct_type.x [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] -// CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc5 -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @CompleteClass.F(imports.%Main.import_ref.5ab3ec.3: type) [from "foo.carbon"] { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @CompleteClass.as.Destroy.impl.Op(imports.%Main.import_ref.5ab3ec.4: type) [from "foo.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %ptr: type = ptr_type %CompleteClass [symbolic = %ptr (constants.%ptr.5b4)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1fe)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc4: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.955)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.9e0)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %return.param: %CompleteClass.a06 [from "foo.carbon"] { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -584,6 +425,10 @@ class Class(U:! type) { // CHECK:STDOUT: return %.loc9_18 to %return // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: specific @Class(constants.%T) { +// CHECK:STDOUT: %T.1 => constants.%T +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: @@ -594,38 +439,8 @@ class Class(U:! type) { // CHECK:STDOUT: %CompleteClass.F => constants.%CompleteClass.F.874 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.f97 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.8e0 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass.F(constants.%T) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.f97 -// CHECK:STDOUT: %ptr => constants.%ptr.5b4 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1fe -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class(constants.%T) { -// CHECK:STDOUT: %T.1 => constants.%T -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.dab -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.955 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9e0 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%i32) { // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: @@ -666,17 +481,12 @@ class Class(U:! type) { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %CompleteClass.F.specific_fn: = specific_function %CompleteClass.F.f7c, @CompleteClass.F(%i32) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.6c3: = impl_witness imports.%Destroy.impl_witness_table.05c, @CompleteClass.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type.64d: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.931: %CompleteClass.as.Destroy.impl.Op.type.64d = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.5b4: type = ptr_type %CompleteClass.f97 [symbolic] -// CHECK:STDOUT: %pattern_type.1fe: type = pattern_type %ptr.5b4 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.7b6: = impl_witness imports.%Destroy.impl_witness_table.05c, @CompleteClass.as.Destroy.impl(%i32) [concrete] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type.287: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%i32) [concrete] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.cea: %CompleteClass.as.Destroy.impl.Op.type.287 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %CompleteClass.e9e, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.c18: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.62b: %AggregateT.as_type.as.Destroy.impl.Op.type.c18 = struct_value () [concrete] // CHECK:STDOUT: %ptr.a97: type = ptr_type %CompleteClass.e9e [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.a97 [concrete] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.specific_fn: = specific_function %CompleteClass.as.Destroy.impl.Op.cea, @CompleteClass.as.Destroy.impl.Op(%i32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.62b, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: %UseField.type: type = fn_type @UseField [concrete] // CHECK:STDOUT: %UseField: %UseField.type = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -710,13 +520,6 @@ class Class(U:! type) { // CHECK:STDOUT: %Main.import_ref.a52: @CompleteClass.%CompleteClass.F.type (%CompleteClass.F.type.14f) = import_ref Main//foo, loc8_17, loaded [symbolic = @CompleteClass.%CompleteClass.F (constants.%CompleteClass.F.874)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T.8b3)] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.33d: = import_ref Main//foo, loc6_31, loaded [symbolic = @CompleteClass.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.6c3)] -// CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T.8b3)] -// CHECK:STDOUT: %Main.import_ref.e27: type = import_ref Main//foo, loc6_31, loaded [symbolic = @CompleteClass.as.Destroy.impl.%CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %Main.import_ref.e45: type = import_ref Main//foo, inst82 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.6dd: @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op.type (%CompleteClass.as.Destroy.impl.Op.type.64d) = import_ref Main//foo, loc6_31, loaded [symbolic = @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op (constants.%CompleteClass.as.Destroy.impl.Op.931)] -// CHECK:STDOUT: %Destroy.impl_witness_table.05c = impl_witness_table (%Main.import_ref.6dd), @CompleteClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Main.import_ref.5ab3ec.4: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T.8b3)] // CHECK:STDOUT: %.364: @CompleteClass.%CompleteClass.elem (%CompleteClass.elem.28a) = field_decl n, element0 [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] @@ -754,21 +557,6 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @CompleteClass.as.Destroy.impl(imports.%Main.import_ref.5ab3ec.3: type) [from "foo.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.05c, @CompleteClass.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.6c3)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T) [symbolic = %CompleteClass.as.Destroy.impl.Op.type (constants.%CompleteClass.as.Destroy.impl.Op.type.64d)] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op: @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op.type (%CompleteClass.as.Destroy.impl.Op.type.64d) = struct_value () [symbolic = %CompleteClass.as.Destroy.impl.Op (constants.%CompleteClass.as.Destroy.impl.Op.931)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%Main.import_ref.e27 as imports.%Main.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.33d -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.5ab3ec.1: type) [from "foo.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] // CHECK:STDOUT: @@ -796,8 +584,8 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %CompleteClass.e9e = var %v.var_patt // CHECK:STDOUT: %F.ref.loc6: %F.type = name_ref F, imports.%Main.F [concrete = constants.%F] -// CHECK:STDOUT: %.loc6_3: ref %CompleteClass.e9e = splice_block %v.var {} -// CHECK:STDOUT: %F.call: init %CompleteClass.e9e = call %F.ref.loc6() to %.loc6_3 +// CHECK:STDOUT: %.loc6_3.1: ref %CompleteClass.e9e = splice_block %v.var {} +// CHECK:STDOUT: %F.call: init %CompleteClass.e9e = call %F.ref.loc6() to %.loc6_3.1 // CHECK:STDOUT: assign %v.var, %F.call // CHECK:STDOUT: %.loc6_27: type = splice_block %CompleteClass [concrete = constants.%CompleteClass.e9e] { // CHECK:STDOUT: %CompleteClass.ref: %CompleteClass.type = name_ref CompleteClass, imports.%Main.CompleteClass [concrete = constants.%CompleteClass.generic] @@ -811,11 +599,13 @@ class Class(U:! type) { // CHECK:STDOUT: %F.ref.loc7: %CompleteClass.F.type.1bc = name_ref F, %.loc7 [concrete = constants.%CompleteClass.F.f7c] // CHECK:STDOUT: %CompleteClass.F.specific_fn: = specific_function %F.ref.loc7, @CompleteClass.F(constants.%i32) [concrete = constants.%CompleteClass.F.specific_fn] // CHECK:STDOUT: %CompleteClass.F.call: init %i32 = call %CompleteClass.F.specific_fn() -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%CompleteClass.as.Destroy.impl.Op.cea -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.specific_fn: = specific_function constants.%CompleteClass.as.Destroy.impl.Op.cea, @CompleteClass.as.Destroy.impl.Op(constants.%i32) [concrete = constants.%CompleteClass.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %v.var, %CompleteClass.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%CompleteClass.e9e, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc6_3.2: %type_where = converted constants.%CompleteClass.e9e, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.62b +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.62b, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.a97 = addr_of %v.var -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return %CompleteClass.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -827,17 +617,6 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: fn @F [from "foo.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @CompleteClass.as.Destroy.impl.Op(imports.%Main.import_ref.5ab3ec.4: type) [from "foo.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %ptr: type = ptr_type %CompleteClass [symbolic = %ptr (constants.%ptr.5b4)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1fe)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @UseField() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -846,8 +625,8 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %CompleteClass.e9e = var %v.var_patt // CHECK:STDOUT: %F.ref: %F.type = name_ref F, imports.%Main.F [concrete = constants.%F] -// CHECK:STDOUT: %.loc11_3: ref %CompleteClass.e9e = splice_block %v.var {} -// CHECK:STDOUT: %F.call: init %CompleteClass.e9e = call %F.ref() to %.loc11_3 +// CHECK:STDOUT: %.loc11_3.1: ref %CompleteClass.e9e = splice_block %v.var {} +// CHECK:STDOUT: %F.call: init %CompleteClass.e9e = call %F.ref() to %.loc11_3.1 // CHECK:STDOUT: assign %v.var, %F.call // CHECK:STDOUT: %.loc11_27: type = splice_block %CompleteClass [concrete = constants.%CompleteClass.e9e] { // CHECK:STDOUT: %CompleteClass.ref: %CompleteClass.type = name_ref CompleteClass, imports.%Main.CompleteClass [concrete = constants.%CompleteClass.generic] @@ -865,11 +644,13 @@ class Class(U:! type) { // 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.loc12_11.2: = bound_method %.loc12_11.2, %specific_fn // CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc12_11.2(%.loc12_11.2) -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%CompleteClass.as.Destroy.impl.Op.cea -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.specific_fn: = specific_function constants.%CompleteClass.as.Destroy.impl.Op.cea, @CompleteClass.as.Destroy.impl.Op(constants.%i32) [concrete = constants.%CompleteClass.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc11: = bound_method %v.var, %CompleteClass.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%CompleteClass.e9e, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc11_3.2: %type_where = converted constants.%CompleteClass.e9e, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.62b +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.62b, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc11: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.a97 = addr_of %v.var -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc11(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc11(%addr) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -899,36 +680,6 @@ class Class(U:! type) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.f97 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.6c3 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl.Op(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.f97 -// CHECK:STDOUT: %ptr => constants.%ptr.5b4 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1fe -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl(constants.%i32) { -// CHECK:STDOUT: %T => constants.%i32 -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.e9e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.7b6 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type => constants.%CompleteClass.as.Destroy.impl.Op.type.287 -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op => constants.%CompleteClass.as.Destroy.impl.Op.cea -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl.Op(constants.%i32) { -// CHECK:STDOUT: %T => constants.%i32 -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.e9e -// CHECK:STDOUT: %ptr => constants.%ptr.a97 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a94 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_generic_arg_mismatch.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -963,17 +714,12 @@ class Class(U:! type) { // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.6c3: = impl_witness imports.%Destroy.impl_witness_table.05c, @CompleteClass.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type.64d: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.931: %CompleteClass.as.Destroy.impl.Op.type.64d = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.5b4: type = ptr_type %CompleteClass.f97 [symbolic] -// CHECK:STDOUT: %pattern_type.1fe: type = pattern_type %ptr.5b4 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.7e1: = impl_witness imports.%Destroy.impl_witness_table.05c, @CompleteClass.as.Destroy.impl(%ptr.9e1) [concrete] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type.7af: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%ptr.9e1) [concrete] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.69b: %CompleteClass.as.Destroy.impl.Op.type.7af = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %CompleteClass.0fe, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.8b2: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.634: %AggregateT.as_type.as.Destroy.impl.Op.type.8b2 = struct_value () [concrete] // CHECK:STDOUT: %ptr.c79: type = ptr_type %CompleteClass.0fe [concrete] -// CHECK:STDOUT: %pattern_type.cea: type = pattern_type %ptr.c79 [concrete] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.specific_fn: = specific_function %CompleteClass.as.Destroy.impl.Op.69b, @CompleteClass.as.Destroy.impl.Op(%ptr.9e1) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.634, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -996,13 +742,6 @@ class Class(U:! type) { // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.33d: = import_ref Main//foo, loc6_31, loaded [symbolic = @CompleteClass.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.6c3)] -// CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.e27: type = import_ref Main//foo, loc6_31, loaded [symbolic = @CompleteClass.as.Destroy.impl.%CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %Main.import_ref.e45: type = import_ref Main//foo, inst82 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.6dd: @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op.type (%CompleteClass.as.Destroy.impl.Op.type.64d) = import_ref Main//foo, loc6_31, loaded [symbolic = @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op (constants.%CompleteClass.as.Destroy.impl.Op.931)] -// CHECK:STDOUT: %Destroy.impl_witness_table.05c = impl_witness_table (%Main.import_ref.6dd), @CompleteClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Main.import_ref.5ab3ec.4: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1018,21 +757,6 @@ class Class(U:! type) { // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @CompleteClass.as.Destroy.impl(imports.%Main.import_ref.5ab3ec.3: type) [from "foo.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.05c, @CompleteClass.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.6c3)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T) [symbolic = %CompleteClass.as.Destroy.impl.Op.type (constants.%CompleteClass.as.Destroy.impl.Op.type.64d)] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op: @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op.type (%CompleteClass.as.Destroy.impl.Op.type.64d) = struct_value () [symbolic = %CompleteClass.as.Destroy.impl.Op (constants.%CompleteClass.as.Destroy.impl.Op.931)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%Main.import_ref.e27 as imports.%Main.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.33d -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.5ab3ec.1: type) [from "foo.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: @@ -1062,7 +786,7 @@ class Class(U:! type) { // CHECK:STDOUT: %F.ref: %F.type = name_ref F, imports.%Main.F [concrete = constants.%F] // CHECK:STDOUT: %.loc14_34: ref %CompleteClass.a06 = temporary_storage // CHECK:STDOUT: %F.call: init %CompleteClass.a06 = call %F.ref() to %.loc14_34 -// CHECK:STDOUT: %.loc14_3: %CompleteClass.0fe = converted %F.call, [concrete = ] +// CHECK:STDOUT: %.loc14_3.1: %CompleteClass.0fe = converted %F.call, [concrete = ] // CHECK:STDOUT: assign %v.var, // CHECK:STDOUT: %.loc14_28: type = splice_block %CompleteClass [concrete = constants.%CompleteClass.0fe] { // CHECK:STDOUT: %CompleteClass.ref: %CompleteClass.type = name_ref CompleteClass, imports.%Main.CompleteClass [concrete = constants.%CompleteClass.generic] @@ -1072,11 +796,13 @@ class Class(U:! type) { // CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(constants.%ptr.9e1) [concrete = constants.%CompleteClass.0fe] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %CompleteClass.0fe = bind_name v, %v.var -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%CompleteClass.as.Destroy.impl.Op.69b -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.specific_fn: = specific_function constants.%CompleteClass.as.Destroy.impl.Op.69b, @CompleteClass.as.Destroy.impl.Op(constants.%ptr.9e1) [concrete = constants.%CompleteClass.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %v.var, %CompleteClass.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%CompleteClass.0fe, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc14_3.2: %type_where = converted constants.%CompleteClass.0fe, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.634 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.634, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.c79 = addr_of %v.var -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1088,17 +814,6 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: fn @F [from "foo.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @CompleteClass.as.Destroy.impl.Op(imports.%Main.import_ref.5ab3ec.4: type) [from "foo.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] -// CHECK:STDOUT: %ptr: type = ptr_type %CompleteClass [symbolic = %ptr (constants.%ptr.5b4)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1fe)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @CompleteClass(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: @@ -1131,69 +846,19 @@ class Class(U:! type) { // CHECK:STDOUT: %CompleteClass.F => constants.%CompleteClass.F.971 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.f97 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.6c3 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.f97 -// CHECK:STDOUT: %ptr => constants.%ptr.5b4 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1fe -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl(constants.%ptr.9e1) { -// CHECK:STDOUT: %T => constants.%ptr.9e1 -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.0fe -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.7e1 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type => constants.%CompleteClass.as.Destroy.impl.Op.type.7af -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op => constants.%CompleteClass.as.Destroy.impl.Op.69b -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl.Op(constants.%ptr.9e1) { -// CHECK:STDOUT: %T => constants.%ptr.9e1 -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass.0fe -// CHECK:STDOUT: %ptr => constants.%ptr.c79 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cea -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_foo.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] -// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] -// CHECK:STDOUT: %complete_type.a68: = complete_type_witness %struct_type.n [concrete] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] -// CHECK:STDOUT: %CompleteClass.elem: type = unbound_element_type %CompleteClass, %i32 [symbolic] -// 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: %Destroy.impl_witness.8e0: = impl_witness imports.%Destroy.impl_witness_table, @CompleteClass.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op: %CompleteClass.as.Destroy.impl.Op.type = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.5b4: type = ptr_type %CompleteClass [symbolic] -// CHECK:STDOUT: %pattern_type.1fe: type = pattern_type %ptr.5b4 [symbolic] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] // CHECK:STDOUT: %Class.type.cf06d9.1: type = generic_class_type @Class.1 [concrete] // CHECK:STDOUT: %Class.generic.9545f5.1: %Class.type.cf06d9.1 = struct_value () [concrete] +// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Class.type.cf06d9.2: type = generic_class_type @Class.loc12 [concrete] // CHECK:STDOUT: %Class.generic.9545f5.2: %Class.type.cf06d9.2 = struct_value () [concrete] // CHECK:STDOUT: %Class.fe1b2d.2: type = class_type @Class.loc12, @Class.loc12(%U) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.dab: = impl_witness @Class.loc12.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %ptr.955: type = ptr_type %Class.fe1b2d.2 [symbolic] -// CHECK:STDOUT: %pattern_type.9e0: type = pattern_type %ptr.955 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1201,26 +866,10 @@ class Class(U:! type) { // CHECK:STDOUT: %Main.CompleteClass = import_ref Main//foo, CompleteClass, unloaded // CHECK:STDOUT: %Main.F = import_ref Main//foo, F, unloaded // CHECK:STDOUT: %Core.ece: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Main.import_ref.035 = import_ref Main//foo, loc6_31, unloaded -// CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.eb1: = import_ref Main//foo, loc9_1, loaded [concrete = constants.%complete_type.a68] -// CHECK:STDOUT: %Main.import_ref.3c0 = import_ref Main//foo, inst37 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.051 = import_ref Main//foo, loc7_8, unloaded -// CHECK:STDOUT: %Main.import_ref.570 = import_ref Main//foo, loc8_17, unloaded -// CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.e27: type = import_ref Main//foo, loc6_31, loaded [symbolic = @CompleteClass.as.Destroy.impl.%CompleteClass (constants.%CompleteClass)] -// CHECK:STDOUT: %Main.import_ref.e45: type = import_ref Main//foo, inst82 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.9d098e.1 = import_ref Main//foo, loc6_31, unloaded -// CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.9d098e.2 = import_ref Main//foo, loc6_31, unloaded -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (%Main.import_ref.9d098e.2), @CompleteClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Main.import_ref.5ab3ec.4: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.5ab3ec.5: type = import_ref Main//foo, loc4_13, loaded [symbolic = @Class.1.%T (constants.%T)] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] +// CHECK:STDOUT: %Main.import_ref.5ab: type = import_ref Main//foo, loc4_13, loaded [symbolic = @Class.1.%T (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1242,71 +891,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @CompleteClass.as.Destroy.impl(imports.%Main.import_ref.5ab3ec.2: type) [from "foo.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table, @CompleteClass.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.8e0)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op.type: type = fn_type @CompleteClass.as.Destroy.impl.Op, @CompleteClass.as.Destroy.impl(%T) [symbolic = %CompleteClass.as.Destroy.impl.Op.type (constants.%CompleteClass.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %CompleteClass.as.Destroy.impl.Op: @CompleteClass.as.Destroy.impl.%CompleteClass.as.Destroy.impl.Op.type (%CompleteClass.as.Destroy.impl.Op.type) = struct_value () [symbolic = %CompleteClass.as.Destroy.impl.Op (constants.%CompleteClass.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%Main.import_ref.e27 as imports.%Main.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.9d098e.1 -// CHECK:STDOUT: witness = imports.%Main.import_ref.035 -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.loc12.%U.loc12_13.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %Class: type = class_type @Class.loc12, @Class.loc12(%U) [symbolic = %Class (constants.%Class.fe1b2d.2)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.loc12.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.dab)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%U) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.loc12.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = value_param call_param0 -// CHECK:STDOUT: %.loc12_23.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class.fe1b2d.2)] { -// CHECK:STDOUT: %.loc12_23.3: type = specific_constant constants.%Class.fe1b2d.2, @Class.loc12(constants.%U) [symbolic = %Class (constants.%Class.fe1b2d.2)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc12_23.3 [symbolic = %Class (constants.%Class.fe1b2d.2)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.loc12.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.5ab3ec.1: type) [from "foo.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass)] -// CHECK:STDOUT: %CompleteClass.elem: type = unbound_element_type %CompleteClass, constants.%i32 [symbolic = %CompleteClass.elem (constants.%CompleteClass.elem)] -// CHECK:STDOUT: %CompleteClass.F.type: type = fn_type @CompleteClass.F, @CompleteClass(%T) [symbolic = %CompleteClass.F.type (constants.%CompleteClass.F.type)] -// CHECK:STDOUT: %CompleteClass.F: @CompleteClass.%CompleteClass.F.type (%CompleteClass.F.type) = struct_value () [symbolic = %CompleteClass.F (constants.%CompleteClass.F)] -// CHECK:STDOUT: -// CHECK:STDOUT: class { -// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.eb1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.3c0 -// CHECK:STDOUT: .n = imports.%Main.import_ref.051 -// CHECK:STDOUT: .F = imports.%Main.import_ref.570 -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic class @Class.1(imports.%Main.import_ref.5ab3ec.5: type) [from "foo.carbon"] { +// CHECK:STDOUT: generic class @Class.1(imports.%Main.import_ref.5ab: type) [from "foo.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: class; @@ -1320,10 +905,6 @@ class Class(U:! type) { // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: = name_ref T, [concrete = ] // CHECK:STDOUT: %.loc17: = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class.fe1b2d.2 [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class.fe1b2d.2)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%U) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.dab)] // CHECK:STDOUT: %complete_type: = complete_type_witness [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1334,59 +915,6 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @CompleteClass.F(imports.%Main.import_ref.5ab3ec.3: type) [from "foo.carbon"] { -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @CompleteClass.as.Destroy.impl.Op(imports.%Main.import_ref.5ab3ec.4: type) [from "foo.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass)] -// CHECK:STDOUT: %ptr: type = ptr_type %CompleteClass [symbolic = %ptr (constants.%ptr.5b4)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1fe)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.loc12.%U.loc12_13.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %Class: type = class_type @Class.loc12, @Class.loc12(%U) [symbolic = %Class (constants.%Class.fe1b2d.2)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.955)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.9e0)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass -// CHECK:STDOUT: %CompleteClass.elem => constants.%CompleteClass.elem -// CHECK:STDOUT: %CompleteClass.F.type => constants.%CompleteClass.F.type -// CHECK:STDOUT: %CompleteClass.F => constants.%CompleteClass.F -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.8e0 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.F(constants.%T) {} -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CompleteClass.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %CompleteClass => constants.%CompleteClass -// CHECK:STDOUT: %ptr => constants.%ptr.5b4 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1fe -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class.1(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } @@ -1395,16 +923,3 @@ class Class(U:! type) { // CHECK:STDOUT: %U.loc12_13.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %Class => constants.%Class.fe1b2d.2 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.dab -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %Class => constants.%Class.fe1b2d.2 -// CHECK:STDOUT: %ptr => constants.%ptr.955 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9e0 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/init.carbon b/toolchain/check/testdata/class/generic/init.carbon index a27cf9bf227e..93409cd4c116 100644 --- a/toolchain/check/testdata/class/generic/init.carbon +++ b/toolchain/check/testdata/class/generic/init.carbon @@ -54,8 +54,6 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.be8: %Copy.type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.322: type = pattern_type %Copy.type [concrete] @@ -74,14 +72,17 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %.427: type = fn_type_with_self_type %Copy.Op.type, %T.be8 [symbolic] // CHECK:STDOUT: %impl.elem0.168: %.427 = impl_witness_access %Copy.lookup_impl_witness.e15, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.2ce: = specific_impl_function %impl.elem0.168, @Copy.Op(%T.be8) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.a5d: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T.as_type) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type.f04: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T.as_type) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.d2f: %Class.as.Destroy.impl.Op.type.f04 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.facet.90a: %Destroy.type = facet_value %Class.a5c, (%Destroy.impl_witness.a5d) [symbolic] -// CHECK:STDOUT: %.4f0: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.90a [symbolic] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.38a: %type_where = facet_value %Class.a5c, () [symbolic] // CHECK:STDOUT: %ptr.e19: type = ptr_type %Class.a5c [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.specific_fn.8ad: = specific_function %Class.as.Destroy.impl.Op.d2f, @Class.as.Destroy.impl.Op(%T.as_type) [symbolic] // CHECK:STDOUT: %require_complete.3cb: = require_complete_type %ptr.e19 [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.a66: = lookup_impl_witness %Class.a5c, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.facet.440: %Destroy.type = facet_value %Class.a5c, (%Destroy.lookup_impl_witness.a66) [symbolic] +// CHECK:STDOUT: %.4d8: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.440 [symbolic] +// CHECK:STDOUT: %impl.elem0.134: %.4d8 = impl_witness_access %Destroy.lookup_impl_witness.a66, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.62c: = specific_impl_function %impl.elem0.134, @Destroy.Op(%Destroy.facet.440) [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] @@ -102,21 +103,22 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %i32, (%Copy.impl_witness.a32) [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type.637: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%i32) [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.5bc: %Class.as.Destroy.impl.Op.type.637 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.06f: %type_where = facet_value %Class.247, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bf8: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.06f) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bc0: %AggregateT.as_type.as.Destroy.impl.Op.type.bf8 = struct_value () [concrete] // CHECK:STDOUT: %ptr.f7c: type = ptr_type %Class.247 [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: .Int = %Core.Int // 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.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -184,12 +186,12 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %impl.elem0.loc10_27.2: @InitFromStructGeneric.%.loc10_27.2 (%.427) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_27.2 (constants.%impl.elem0.168)] // CHECK:STDOUT: %specific_impl_fn.loc10_27.2: = specific_impl_function %impl.elem0.loc10_27.2, @Copy.Op(%T.loc9_26.1) [symbolic = %specific_impl_fn.loc10_27.2 (constants.%specific_impl_fn.2ce)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class.loc10_17.2, %T.as_type.loc9_44.1 [symbolic = %Class.elem (constants.%Class.elem.14a)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T.as_type.loc9_44.1) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.a5d)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Class.loc10_17.2, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.90a)] -// CHECK:STDOUT: %.loc10_3.2: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc10_3.2 (constants.%.4f0)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T.as_type.loc9_44.1) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type.f04)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @InitFromStructGeneric.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type.f04) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op.d2f)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.specific_fn: = specific_function %Class.as.Destroy.impl.Op, @Class.as.Destroy.impl.Op(%T.as_type.loc9_44.1) [symbolic = %Class.as.Destroy.impl.Op.specific_fn (constants.%Class.as.Destroy.impl.Op.specific_fn.8ad)] +// CHECK:STDOUT: %facet_value.loc10_3.2: %type_where = facet_value %Class.loc10_17.2, () [symbolic = %facet_value.loc10_3.2 (constants.%facet_value.38a)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Class.loc10_17.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.a66)] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Class.loc10_17.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.440)] +// CHECK:STDOUT: %.loc10_3.4: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc10_3.4 (constants.%.4d8)] +// CHECK:STDOUT: %impl.elem0.loc10_3.2: @InitFromStructGeneric.%.loc10_3.4 (%.4d8) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_3.2 (constants.%impl.elem0.134)] +// CHECK:STDOUT: %specific_impl_fn.loc10_3.2: = specific_impl_function %impl.elem0.loc10_3.2, @Destroy.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc10_3.2 (constants.%specific_impl_fn.62c)] // CHECK:STDOUT: %ptr: type = ptr_type %Class.loc10_17.2 [symbolic = %ptr (constants.%ptr.e19)] // CHECK:STDOUT: %require_complete.loc10_3: = require_complete_type %ptr [symbolic = %require_complete.loc10_3 (constants.%require_complete.3cb)] // CHECK:STDOUT: @@ -230,12 +232,14 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %bound_method.loc11_11.2: = bound_method %.loc11_11.2, %specific_impl_fn.loc11 // CHECK:STDOUT: %.loc9_47: ref @InitFromStructGeneric.%T.as_type.loc9_44.1 (%T.as_type) = splice_block %return {} // CHECK:STDOUT: %.loc11_11.3: init @InitFromStructGeneric.%T.as_type.loc9_44.1 (%T.as_type) = call %bound_method.loc11_11.2(%.loc11_11.2) to %.loc9_47 -// CHECK:STDOUT: %impl.elem0.loc10_3: @InitFromStructGeneric.%.loc10_3.2 (%.4f0) = impl_witness_access constants.%Destroy.impl_witness.a5d, element0 [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op.d2f)] -// CHECK:STDOUT: %bound_method.loc10_3.1: = bound_method %v.var, %impl.elem0.loc10_3 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0.loc10_3, @Class.as.Destroy.impl.Op(constants.%T.as_type) [symbolic = %Class.as.Destroy.impl.Op.specific_fn (constants.%Class.as.Destroy.impl.Op.specific_fn.8ad)] -// CHECK:STDOUT: %bound_method.loc10_3.2: = bound_method %v.var, %specific_fn +// CHECK:STDOUT: %facet_value.loc10_3.1: %type_where = facet_value constants.%Class.a5c, () [symbolic = %facet_value.loc10_3.2 (constants.%facet_value.38a)] +// CHECK:STDOUT: %.loc10_3.2: %type_where = converted constants.%Class.a5c, %facet_value.loc10_3.1 [symbolic = %facet_value.loc10_3.2 (constants.%facet_value.38a)] +// CHECK:STDOUT: %impl.elem0.loc10_3.1: @InitFromStructGeneric.%.loc10_3.4 (%.4d8) = impl_witness_access constants.%Destroy.lookup_impl_witness.a66, element0 [symbolic = %impl.elem0.loc10_3.2 (constants.%impl.elem0.134)] +// CHECK:STDOUT: %bound_method.loc10_3.1: = bound_method %v.var, %impl.elem0.loc10_3.1 +// CHECK:STDOUT: %specific_impl_fn.loc10_3.1: = specific_impl_function %impl.elem0.loc10_3.1, @Destroy.Op(constants.%Destroy.facet.440) [symbolic = %specific_impl_fn.loc10_3.2 (constants.%specific_impl_fn.62c)] +// CHECK:STDOUT: %bound_method.loc10_3.2: = bound_method %v.var, %specific_impl_fn.loc10_3.1 // CHECK:STDOUT: %addr: @InitFromStructGeneric.%ptr (%ptr.e19) = addr_of %v.var -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_3.2(%addr) +// CHECK:STDOUT: %.loc10_3.3: init %empty_tuple.type = call %bound_method.loc10_3.2(%addr) // CHECK:STDOUT: return %.loc11_11.3 to %return // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -257,8 +261,8 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %.loc15_30.2: ref %i32 = class_element_access %v.var, element0 // CHECK:STDOUT: %.loc15_30.3: init %i32 = initialize_from %Int.as.Copy.impl.Op.call.loc15 to %.loc15_30.2 // CHECK:STDOUT: %.loc15_30.4: init %Class.247 = class_init (%.loc15_30.3), %v.var -// CHECK:STDOUT: %.loc15_3: init %Class.247 = converted %.loc15_30.1, %.loc15_30.4 -// CHECK:STDOUT: assign %v.var, %.loc15_3 +// CHECK:STDOUT: %.loc15_3.1: init %Class.247 = converted %.loc15_30.1, %.loc15_30.4 +// CHECK:STDOUT: assign %v.var, %.loc15_3.1 // CHECK:STDOUT: %.loc15_19: type = splice_block %Class [concrete = constants.%Class.247] { // CHECK:STDOUT: %Class.ref: %Class.type = name_ref Class, file.%Class.decl [concrete = constants.%Class.generic] // CHECK:STDOUT: %int_32.loc15: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -275,11 +279,13 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %specific_fn.loc16: = specific_function %impl.elem0.loc16, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc16_11.2: = bound_method %.loc16_11.2, %specific_fn.loc16 // CHECK:STDOUT: %Int.as.Copy.impl.Op.call.loc16: init %i32 = call %bound_method.loc16_11.2(%.loc16_11.2) -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%Class.as.Destroy.impl.Op.5bc +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Class.247, () [concrete = constants.%facet_value.06f] +// CHECK:STDOUT: %.loc15_3.2: %type_where = converted constants.%Class.247, %facet_value [concrete = constants.%facet_value.06f] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bc0 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc15_3: = bound_method %v.var, %Class.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc15_3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.f7c = addr_of %v.var -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc15_3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc15_3(%addr) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call.loc16 to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -294,7 +300,6 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Adapt.type: type = generic_class_type @Adapt [concrete] // CHECK:STDOUT: %Adapt.generic: %Adapt.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.be8: %Copy.type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.322: type = pattern_type %Copy.type [concrete] @@ -331,13 +336,11 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // 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: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] diff --git a/toolchain/check/testdata/class/generic/member_access.carbon b/toolchain/check/testdata/class/generic/member_access.carbon index 5843f21135cf..f2bf77c4b13c 100644 --- a/toolchain/check/testdata/class/generic/member_access.carbon +++ b/toolchain/check/testdata/class/generic/member_access.carbon @@ -81,8 +81,6 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %pattern_type.f74: type = pattern_type %ptr.f3f [symbolic] // CHECK:STDOUT: %Class.GetAddr.type.2b0: type = fn_type @Class.GetAddr, @Class(%T.be8) [symbolic] // CHECK:STDOUT: %Class.GetAddr.913: %Class.GetAddr.type.2b0 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T.be8) [symbolic] // CHECK:STDOUT: %struct_type.x.419: type = struct_type {.x: %T.as_type} [symbolic] // CHECK:STDOUT: %complete_type.1d8: = complete_type_witness %struct_type.x.419 [symbolic] // CHECK:STDOUT: %require_complete.3e3: = require_complete_type %Class.2c5 [symbolic] @@ -145,21 +143,6 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc4_13.2: %Copy.type) { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.2: %Copy.type) { // CHECK:STDOUT: // CHECK:STDOUT: @@ -236,14 +219,6 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc4_13.2: %Copy.type) { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.818)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @DirectFieldAccess(%x.param: %Class.062) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref.loc22_10: %Class.062 = name_ref x, %x @@ -327,19 +302,6 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %pattern_type.loc13_34 => constants.%pattern_type.f74 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Class => constants.%Class.2c5 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Class => constants.%Class.2c5 -// CHECK:STDOUT: %ptr => constants.%ptr.818 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e8f -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%Copy.facet.c49) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%Copy.facet.c49 // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/member_inline.carbon b/toolchain/check/testdata/class/generic/member_inline.carbon index f4d655bd17bb..b17c4ca6838c 100644 --- a/toolchain/check/testdata/class/generic/member_inline.carbon +++ b/toolchain/check/testdata/class/generic/member_inline.carbon @@ -63,13 +63,6 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.07c: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %ptr.818: type = ptr_type %Class [symbolic] -// CHECK:STDOUT: %pattern_type.e8f: type = pattern_type %ptr.818 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [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] // CHECK:STDOUT: %Copy.Op.type: type = fn_type @Copy.Op [concrete] @@ -83,12 +76,10 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // 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.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -104,35 +95,6 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc5_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.e8f) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.e8f) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_28.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.818) = value_param call_param0 -// CHECK:STDOUT: %.loc5_28.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc5_28.3: type = specific_constant constants.%Class, @Class(constants.%T.be8) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_28.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.818) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc5_13.2: %Copy.type) { // CHECK:STDOUT: %T.loc5_13.1: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.1 (constants.%T.be8)] // CHECK:STDOUT: @@ -190,10 +152,6 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %T.as_type.loc14_10.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc14_10.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc14_10: type = converted %T.ref, %T.as_type.loc14_10.1 [symbolic = %T.as_type.loc14_10.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc14_8: @Class.%Class.elem (%Class.elem) = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T.be8) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type.loc15_1.1: = complete_type_witness constants.%struct_type.n [symbolic = %complete_type.loc15_1.2 (constants.%complete_type)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc15_1.1 // CHECK:STDOUT: @@ -263,17 +221,6 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc5_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.818)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.e8f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.818)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.be8) { // CHECK:STDOUT: %T.loc5_13.1 => constants.%T.be8 // CHECK:STDOUT: @@ -304,25 +251,12 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %pattern_type.loc10_22 => constants.%pattern_type.965801.1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.818 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e8f -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_member_inline_missing_self_dot.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.322: type = pattern_type %Copy.type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Copy.type [concrete] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic] @@ -330,13 +264,6 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %empty_struct_type [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.e5b: type = ptr_type %C [symbolic] -// CHECK:STDOUT: %pattern_type.f35: type = pattern_type %ptr.e5b [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.data: type = struct_type {.data: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.data [concrete] // CHECK:STDOUT: } @@ -344,17 +271,15 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // 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.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.322 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5: type = splice_block %Copy.ref [concrete = constants.%Copy.type] { // CHECK:STDOUT: @@ -365,35 +290,6 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc5_9.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.f35) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.f35) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_24.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.e5b) = value_param call_param0 -// CHECK:STDOUT: %.loc5_24.2: type = splice_block %Self.ref [symbolic = %C (constants.%C)] { -// CHECK:STDOUT: %.loc5_24.3: type = specific_constant constants.%C, @C(constants.%T) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_24.3 [symbolic = %C (constants.%C)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.e5b) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc5_9.2: %Copy.type) { // CHECK:STDOUT: %T.loc5_9.1: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T.loc5_9.1 (constants.%T)] // CHECK:STDOUT: @@ -408,10 +304,6 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: %.loc13_14.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc13_14.2: type = converted %.loc13_14.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc13_11: @C.%C.elem (%C.elem) = field_decl data, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [symbolic = @C.as.Destroy.impl.%C (constants.%C)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.data [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -435,17 +327,6 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc5_9.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.e5b)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.f35)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.e5b)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { // CHECK:STDOUT: %T.loc5_9.1 => constants.%T // CHECK:STDOUT: @@ -458,16 +339,3 @@ class C(T:! Core.Copy) { // CHECK:STDOUT: // CHECK:STDOUT: specific @C.F(constants.%T) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %ptr => constants.%ptr.e5b -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f35 -// 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 fa3b7cb5392b..25cda05d440e 100644 --- a/toolchain/check/testdata/class/generic/member_out_of_line.carbon +++ b/toolchain/check/testdata/class/generic/member_out_of_line.carbon @@ -130,13 +130,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.07c: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T.as_type [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %ptr.818: type = ptr_type %Class [symbolic] -// CHECK:STDOUT: %pattern_type.e8f: type = pattern_type %ptr.818 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [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] // CHECK:STDOUT: %Copy.Op.type: type = fn_type @Copy.Op [concrete] @@ -150,12 +143,10 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // 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.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -220,35 +211,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc5_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.e8f) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.e8f) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_28.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.818) = value_param call_param0 -// CHECK:STDOUT: %.loc5_28.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc5_28.3: type = specific_constant constants.%Class, @Class(constants.%T.be8) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_28.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.818) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc5_13.2: %Copy.type) { // CHECK:STDOUT: %T.loc5_13.1: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.1 (constants.%T.be8)] // CHECK:STDOUT: @@ -306,10 +268,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %T.as_type.loc8_10.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc8_10.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc8_10: type = converted %T.ref, %T.as_type.loc8_10.1 [symbolic = %T.as_type.loc8_10.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc8_8: @Class.%Class.elem (%Class.elem) = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T.be8) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type.loc9_1.1: = complete_type_witness constants.%struct_type.n [symbolic = %complete_type.loc9_1.2 (constants.%complete_type)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc9_1.1 // CHECK:STDOUT: @@ -379,17 +337,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc5_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.818)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.e8f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.818)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T.be8) { // CHECK:STDOUT: %T.loc5_13.1 => constants.%T.be8 // CHECK:STDOUT: @@ -420,19 +367,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %pattern_type.loc7_22 => constants.%pattern_type.965801.1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.818 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e8f -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- nested.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -449,22 +383,10 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %pattern_type.13e: type = pattern_type %B [symbolic] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F, @B(%T, %N) [symbolic] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7eb: = impl_witness @B.%Destroy.impl_witness_table, @B.as.Destroy.impl(%T, %N) [symbolic] -// CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] -// CHECK:STDOUT: %ptr.762: type = ptr_type %B [symbolic] -// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.762 [symbolic] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op, @B.as.Destroy.impl(%T, %N) [symbolic] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = 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: %Destroy.impl_witness.e00: = impl_witness @A.%Destroy.impl_witness_table, @A.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.ca9: type = ptr_type %A [symbolic] -// CHECK:STDOUT: %pattern_type.09b: type = pattern_type %ptr.ca9 [symbolic] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op, @A.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.fca: = require_complete_type %B [symbolic] +// CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -502,65 +424,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @B.as.Destroy.impl(@A.%T.loc5_9.2: type, @B.%N.loc6_11.2: @B.%T (%T)) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: @B.as.Destroy.impl.%T (%T) = bind_symbolic_name N, 1 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %B: type = class_type @B, @B(%T, %N) [symbolic = %B (constants.%B)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @B.%Destroy.impl_witness_table, @B.as.Destroy.impl(%T, %N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.7eb)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op, @B.as.Destroy.impl(%T, %N) [symbolic = %B.as.Destroy.impl.Op.type (constants.%B.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: @B.as.Destroy.impl.%B.as.Destroy.impl.Op.type (%B.as.Destroy.impl.Op.type) = struct_value () [symbolic = %B.as.Destroy.impl.Op (constants.%B.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: @B.as.Destroy.impl.%B.as.Destroy.impl.Op.type (%B.as.Destroy.impl.Op.type) = fn_decl @B.as.Destroy.impl.Op [symbolic = @B.as.Destroy.impl.%B.as.Destroy.impl.Op (constants.%B.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @B.as.Destroy.impl.Op.%pattern_type (%pattern_type.fe8) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @B.as.Destroy.impl.Op.%pattern_type (%pattern_type.fe8) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_18.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @B.as.Destroy.impl.Op.%ptr (%ptr.762) = value_param call_param0 -// CHECK:STDOUT: %.loc6_18.2: type = splice_block %Self.ref [symbolic = %B (constants.%B)] { -// CHECK:STDOUT: %.loc6_18.3: type = specific_constant constants.%B, @B(constants.%T, constants.%N) [symbolic = %B (constants.%B)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_18.3 [symbolic = %B (constants.%B)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @B.as.Destroy.impl.Op.%ptr (%ptr.762) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @A.as.Destroy.impl(@A.%T.loc5_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %A: type = class_type @A, @A(%T) [symbolic = %A (constants.%A)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.%Destroy.impl_witness_table, @A.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.e00)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op, @A.as.Destroy.impl(%T) [symbolic = %A.as.Destroy.impl.Op.type (constants.%A.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: @A.as.Destroy.impl.%A.as.Destroy.impl.Op.type (%A.as.Destroy.impl.Op.type) = struct_value () [symbolic = %A.as.Destroy.impl.Op (constants.%A.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: @A.as.Destroy.impl.%A.as.Destroy.impl.Op.type (%A.as.Destroy.impl.Op.type) = fn_decl @A.as.Destroy.impl.Op [symbolic = @A.as.Destroy.impl.%A.as.Destroy.impl.Op (constants.%A.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @A.as.Destroy.impl.Op.%pattern_type (%pattern_type.09b) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @A.as.Destroy.impl.Op.%pattern_type (%pattern_type.09b) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @A.as.Destroy.impl.Op.%ptr (%ptr.ca9) = value_param call_param0 -// CHECK:STDOUT: %.loc5_19.2: type = splice_block %Self.ref [symbolic = %A (constants.%A)] { -// CHECK:STDOUT: %.loc5_19.3: type = specific_constant constants.%A, @A(constants.%T) [symbolic = %A (constants.%A)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_19.3 [symbolic = %A (constants.%A)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @A.as.Destroy.impl.Op.%ptr (%ptr.ca9) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @A(%T.loc5_9.2: type) { // CHECK:STDOUT: %T.loc5_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_9.1 (constants.%T)] // CHECK:STDOUT: @@ -578,10 +441,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: %N.loc6_11.2: @B.%T (%T) = bind_symbolic_name N, 1 [symbolic = %N.loc6_11.1 (constants.%N)] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [symbolic = @A.as.Destroy.impl.%A (constants.%A)] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @A.as.Destroy.impl(constants.%T) [symbolic = @A.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.e00)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -600,7 +459,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: !definition: // CHECK:STDOUT: %B.F.type: type = fn_type @B.F, @B(%T, %N.loc6_11.1) [symbolic = %B.F.type (constants.%B.F.type)] // CHECK:STDOUT: %B.F: @B.%B.F.type (%B.F.type) = struct_value () [symbolic = %B.F (constants.%B.F)] -// CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] // 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)] { @@ -619,10 +477,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %T.ref.loc7: type = name_ref T, @A.%T.loc5_9.2 [symbolic = %T.loc7 (constants.%T)] // CHECK:STDOUT: %a.loc7: @B.F.%T.loc7 (%T) = bind_name a, %a.param.loc7 // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [symbolic = @B.as.Destroy.impl.%B (constants.%B)] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @B.as.Destroy.impl(constants.%T, constants.%N) [symbolic = @B.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.7eb)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -650,29 +504,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @B.as.Destroy.impl.Op(@A.%T.loc5_9.2: type, @B.%N.loc6_11.2: @B.%T (%T)) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: @B.as.Destroy.impl.Op.%T (%T) = bind_symbolic_name N, 1 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %B: type = class_type @B, @B(%T, %N) [symbolic = %B (constants.%B)] -// CHECK:STDOUT: %ptr: type = ptr_type %B [symbolic = %ptr (constants.%ptr.762)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.fe8)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @B.as.Destroy.impl.Op.%ptr (%ptr.762)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @A.as.Destroy.impl.Op(@A.%T.loc5_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %A: type = class_type @A, @A(%T) [symbolic = %A (constants.%A)] -// CHECK:STDOUT: %ptr: type = ptr_type %A [symbolic = %ptr (constants.%ptr.ca9)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.09b)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @A.as.Destroy.impl.Op.%ptr (%ptr.ca9)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T) { // CHECK:STDOUT: %T.loc5_9.1 => constants.%T // CHECK:STDOUT: @@ -689,7 +520,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: !definition: // CHECK:STDOUT: %B.F.type => constants.%B.F.type // CHECK:STDOUT: %B.F => constants.%B.F -// CHECK:STDOUT: %require_complete => constants.%require_complete.4ae // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @B.F(constants.%T, constants.%N) { @@ -700,31 +530,3 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %pattern_type.loc7_22 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @B.as.Destroy.impl(constants.%T, constants.%N) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N -// CHECK:STDOUT: %B => constants.%B -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.7eb -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @B.as.Destroy.impl.Op(constants.%T, constants.%N) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N -// CHECK:STDOUT: %B => constants.%B -// CHECK:STDOUT: %ptr => constants.%ptr.762 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.fe8 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @A.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %A => constants.%A -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.e00 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @A.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %A => constants.%A -// CHECK:STDOUT: %ptr => constants.%ptr.ca9 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.09b -// 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 7713d99a2c35..4dd025308bd4 100644 --- a/toolchain/check/testdata/class/generic/member_type.carbon +++ b/toolchain/check/testdata/class/generic/member_type.carbon @@ -72,24 +72,12 @@ fn Test() -> i32 { // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.be8 [symbolic] // CHECK:STDOUT: %require_complete.07c: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %Inner.elem.86c: type = unbound_element_type %Inner.6ee, %T.as_type [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.425: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %ptr.dd7: type = ptr_type %Inner.6ee [symbolic] -// CHECK:STDOUT: %pattern_type.43d: type = pattern_type %ptr.dd7 [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type.431: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.b35: %Inner.as.Destroy.impl.Op.type.431 = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.n.d5b: type = struct_type {.n: %T.as_type} [symbolic] // CHECK:STDOUT: %complete_type.934: = complete_type_witness %struct_type.n.d5b [symbolic] // CHECK:STDOUT: %pattern_type.965801.1: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %pattern_type.a9d: type = pattern_type %Inner.6ee [symbolic] // CHECK:STDOUT: %Outer.F.type.f58: type = fn_type @Outer.F, @Outer(%T.be8) [symbolic] // CHECK:STDOUT: %Outer.F.5ba: %Outer.F.type.f58 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.58f: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %ptr.942: type = ptr_type %Outer.117 [symbolic] -// CHECK:STDOUT: %pattern_type.0fd: type = pattern_type %ptr.942 [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = 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.f2b: = require_complete_type %Inner.6ee [symbolic] @@ -144,25 +132,25 @@ fn Test() -> i32 { // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.c49 [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.154: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%Copy.facet.c49) [concrete] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type.e90: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%Copy.facet.c49) [concrete] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.46f: %Inner.as.Destroy.impl.Op.type.e90 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Inner.d35, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.c43: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.0f4: %AggregateT.as_type.as.Destroy.impl.Op.type.c43 = struct_value () [concrete] // CHECK:STDOUT: %ptr.44b: type = ptr_type %Inner.d35 [concrete] -// CHECK:STDOUT: %pattern_type.178: type = pattern_type %ptr.44b [concrete] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.specific_fn: = specific_function %Inner.as.Destroy.impl.Op.46f, @Inner.as.Destroy.impl.Op(%Copy.facet.c49) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.0f4, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Copy = %Core.Copy -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -171,6 +159,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -201,64 +190,6 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Inner.as.Destroy.impl(@Outer.%T.loc4_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T) [symbolic = %Inner (constants.%Inner.6ee)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.425)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%T) [symbolic = %Inner.as.Destroy.impl.Op.type (constants.%Inner.as.Destroy.impl.Op.type.431)] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type.431) = struct_value () [symbolic = %Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op.b35)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Inner.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.decl: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type.431) = fn_decl @Inner.as.Destroy.impl.Op [symbolic = @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op.b35)] { -// CHECK:STDOUT: %self.patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.43d) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.43d) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_15.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.dd7) = value_param call_param0 -// CHECK:STDOUT: %.loc5_15.2: type = splice_block %Self.ref [symbolic = %Inner (constants.%Inner.6ee)] { -// CHECK:STDOUT: %.loc5_15.3: type = specific_constant constants.%Inner.6ee, @Inner(constants.%T.be8) [symbolic = %Inner (constants.%Inner.6ee)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_15.3 [symbolic = %Inner (constants.%Inner.6ee)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Inner.as.Destroy.impl.Op.%ptr (%ptr.dd7) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Inner.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Inner.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Outer.as.Destroy.impl(@Outer.%T.loc4_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.117)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.58f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T) [symbolic = %Outer.as.Destroy.impl.Op.type (constants.%Outer.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = fn_decl @Outer.as.Destroy.impl.Op [symbolic = @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.0fd) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.0fd) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_28.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.942) = value_param call_param0 -// CHECK:STDOUT: %.loc4_28.2: type = splice_block %Self.ref [symbolic = %Outer (constants.%Outer.117)] { -// CHECK:STDOUT: %.loc4_28.3: type = specific_constant constants.%Outer.117, @Outer(constants.%T.be8) [symbolic = %Outer (constants.%Outer.117)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_28.3 [symbolic = %Outer (constants.%Outer.117)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Outer.as.Destroy.impl.Op.%ptr (%ptr.942) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.2: %Copy.type) { // CHECK:STDOUT: %T.loc4_13.1: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.1 (constants.%T.be8)] // CHECK:STDOUT: @@ -287,10 +218,6 @@ fn Test() -> i32 { // CHECK:STDOUT: %return.param: ref @Outer.F.%Inner (%Inner.6ee) = out_param call_param1 // CHECK:STDOUT: %return: ref @Outer.F.%Inner (%Inner.6ee) = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer.117 [symbolic = @Outer.as.Destroy.impl.%Outer (constants.%Outer.117)] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Outer.as.Destroy.impl(constants.%T.be8) [symbolic = @Outer.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.58f)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -317,10 +244,6 @@ fn Test() -> i32 { // CHECK:STDOUT: %T.as_type.loc6_12.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc6_12.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc6_12: type = converted %T.ref, %T.as_type.loc6_12.1 [symbolic = %T.as_type.loc6_12.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc6_10: @Inner.%Inner.elem (%Inner.elem.86c) = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner.6ee [symbolic = @Inner.as.Destroy.impl.%Inner (constants.%Inner.6ee)] -// CHECK:STDOUT: impl_decl @Inner.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.decl), @Inner.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Inner.as.Destroy.impl(constants.%T.be8) [symbolic = @Inner.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.425)] // CHECK:STDOUT: %complete_type.loc7_3.1: = complete_type_witness constants.%struct_type.n.d5b [symbolic = %complete_type.loc7_3.2 (constants.%complete_type.934)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc7_3.1 // CHECK:STDOUT: @@ -331,17 +254,6 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Inner.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T) [symbolic = %Inner (constants.%Inner.6ee)] -// CHECK:STDOUT: %ptr: type = ptr_type %Inner [symbolic = %ptr (constants.%ptr.dd7)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.43d)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.dd7)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @Outer.F(@Outer.%T.loc4_13.2: %Copy.type) { // CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] // CHECK:STDOUT: %T.as_type.loc9_11.1: type = facet_access_type %T [symbolic = %T.as_type.loc9_11.1 (constants.%T.as_type)] @@ -375,17 +287,6 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Outer.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: %Copy.type) { -// CHECK:STDOUT: %T: %Copy.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.be8)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.117)] -// CHECK:STDOUT: %ptr: type = ptr_type %Outer [symbolic = %ptr (constants.%ptr.942)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.0fd)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.942)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @Test() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -407,7 +308,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %Copy.facet.loc13_43.2: %Copy.type = facet_value Core.IntLiteral, (constants.%Copy.impl_witness.d08) [concrete = constants.%Copy.facet.8aa] // CHECK:STDOUT: %.loc13_43.2: %Copy.type = converted Core.IntLiteral, %Copy.facet.loc13_43.2 [concrete = constants.%Copy.facet.8aa] // CHECK:STDOUT: %Outer.F.specific_fn: = specific_function %F.ref, @Outer.F(constants.%Copy.facet.c49) [concrete = constants.%Outer.F.specific_fn] -// CHECK:STDOUT: %.loc13_3: ref %Inner.d35 = splice_block %c.var {} +// CHECK:STDOUT: %.loc13_3.1: ref %Inner.d35 = splice_block %c.var {} // CHECK:STDOUT: %impl.elem0.loc13: %.1df = impl_witness_access constants.%ImplicitAs.impl_witness.204, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0] // CHECK:STDOUT: %bound_method.loc13_42.1: = bound_method %int_1, %impl.elem0.loc13 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] @@ -415,7 +316,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc13_42.2(%int_1) [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %.loc13_42.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %.loc13_42.2: %i32 = converted %int_1, %.loc13_42.1 [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: %Outer.F.call: init %Inner.d35 = call %Outer.F.specific_fn(%.loc13_42.2) to %.loc13_3 +// CHECK:STDOUT: %Outer.F.call: init %Inner.d35 = call %Outer.F.specific_fn(%.loc13_42.2) to %.loc13_3.1 // CHECK:STDOUT: assign %c.var, %Outer.F.call // CHECK:STDOUT: %.loc13_20.1: type = splice_block %Inner.ref [concrete = constants.%Inner.d35] { // CHECK:STDOUT: %Outer.ref.loc13_10: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] @@ -437,11 +338,13 @@ fn Test() -> i32 { // CHECK:STDOUT: %specific_fn.loc14: = specific_function %impl.elem0.loc14, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc14_11.2: = bound_method %.loc14_11.2, %specific_fn.loc14 // CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc14_11.2(%.loc14_11.2) -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%Inner.as.Destroy.impl.Op.46f -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Inner.as.Destroy.impl.Op.46f, @Inner.as.Destroy.impl.Op(constants.%Copy.facet.c49) [concrete = constants.%Inner.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc13_3: = bound_method %c.var, %Inner.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Inner.d35, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc13_3.2: %type_where = converted constants.%Inner.d35, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.0f4 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.0f4, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc13_3: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.44b = addr_of %c.var -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc13_3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc13_3(%addr) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -465,19 +368,6 @@ fn Test() -> i32 { // CHECK:STDOUT: %complete_type.loc7_3.2 => constants.%complete_type.934 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Inner => constants.%Inner.6ee -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.425 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl.Op(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Inner => constants.%Inner.6ee -// CHECK:STDOUT: %ptr => constants.%ptr.dd7 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.43d -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Outer.F(constants.%T.be8) { // CHECK:STDOUT: %T => constants.%T.be8 // CHECK:STDOUT: %T.as_type.loc9_11.1 => constants.%T.as_type @@ -486,19 +376,6 @@ fn Test() -> i32 { // CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.a9d // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Outer => constants.%Outer.117 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.58f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl.Op(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Outer => constants.%Outer.117 -// CHECK:STDOUT: %ptr => constants.%ptr.942 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.0fd -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%Copy.facet.c49) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%Copy.facet.c49 // CHECK:STDOUT: @@ -536,23 +413,6 @@ fn Test() -> i32 { // CHECK:STDOUT: %specific_impl_fn.loc9_38.2 => constants.%Int.as.Copy.impl.Op.specific_fn // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl(constants.%Copy.facet.c49) { -// CHECK:STDOUT: %T => constants.%Copy.facet.c49 -// CHECK:STDOUT: %Inner => constants.%Inner.d35 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.154 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type => constants.%Inner.as.Destroy.impl.Op.type.e90 -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op => constants.%Inner.as.Destroy.impl.Op.46f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl.Op(constants.%Copy.facet.c49) { -// CHECK:STDOUT: %T => constants.%Copy.facet.c49 -// CHECK:STDOUT: %Inner => constants.%Inner.d35 -// CHECK:STDOUT: %ptr => constants.%ptr.44b -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.178 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- interface.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -580,20 +440,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %C.as.Inner.impl.F.type.d1f: type = fn_type @C.as.Inner.impl.F, @C.as.Inner.impl(%T) [symbolic] // CHECK:STDOUT: %C.as.Inner.impl.F.51e: %C.as.Inner.impl.F.type.d1f = struct_value () [symbolic] // CHECK:STDOUT: %Inner.facet.ce6: %Inner.type.d07 = facet_value %C.390, (%Inner.impl_witness.50b) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.44f: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.306: type = ptr_type %C.390 [symbolic] -// CHECK:STDOUT: %pattern_type.670: type = pattern_type %ptr.306 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.403: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.ae5: %C.as.Destroy.impl.Op.type.403 = 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: %Destroy.impl_witness.52f: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.6ff: type = ptr_type %Outer.9d6 [symbolic] -// CHECK:STDOUT: %pattern_type.07e: type = pattern_type %ptr.6ff [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %require_complete.930: = require_complete_type %C.390 [symbolic] // CHECK:STDOUT: %Inner.lookup_impl_witness: = lookup_impl_witness %C.390, @Inner, @Inner(%T) [symbolic] @@ -620,11 +468,6 @@ fn Test() -> i32 { // 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.d57: %Inner.type.56c = facet_value %D, (%Inner.impl_witness.01d) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [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] @@ -638,23 +481,24 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.facet.3aa: %Inner.type.56c = facet_value %C.70f, (%Inner.impl_witness.828) [concrete] // CHECK:STDOUT: %.3eb: type = fn_type_with_self_type %Inner.F.type.86e, %Inner.facet.3aa [concrete] // CHECK:STDOUT: %C.as.Inner.impl.F.specific_fn: = specific_function %C.as.Inner.impl.F.cd5, @C.as.Inner.impl.F(%i32) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d56: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%i32) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.7b8: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%i32) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.ae4: %C.as.Destroy.impl.Op.type.7b8 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C.70f, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.be9: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.46c: %AggregateT.as_type.as.Destroy.impl.Op.type.be9 = struct_value () [concrete] // CHECK:STDOUT: %ptr.18f: type = ptr_type %C.70f [concrete] -// CHECK:STDOUT: %pattern_type.7ba: type = pattern_type %ptr.18f [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function %C.as.Destroy.impl.Op.ae4, @C.as.Destroy.impl.Op(%i32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.46c, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int +// 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -761,64 +605,6 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@Outer.%T.loc4_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.390)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.44f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.403)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.403) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.ae5)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.403) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.ae5)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.670) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.670) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9_11.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.306) = value_param call_param0 -// CHECK:STDOUT: %.loc9_11.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.390)] { -// CHECK:STDOUT: %.loc9_11.3: type = specific_constant constants.%C.390, @C(constants.%T) [symbolic = %C (constants.%C.390)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc9_11.3 [symbolic = %C (constants.%C.390)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.306) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Outer.as.Destroy.impl(@Outer.%T.loc4_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.52f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T) [symbolic = %Outer.as.Destroy.impl.Op.type (constants.%Outer.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = fn_decl @Outer.as.Destroy.impl.Op [symbolic = @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = value_param call_param0 -// CHECK:STDOUT: %.loc4_23.2: type = splice_block %Self.ref [symbolic = %Outer (constants.%Outer.9d6)] { -// CHECK:STDOUT: %.loc4_23.3: type = specific_constant constants.%Outer.9d6, @Outer(constants.%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_23.3 [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// 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.patt: %pattern_type.510 = binding_pattern self [concrete] @@ -841,22 +627,6 @@ fn Test() -> i32 { // CHECK:STDOUT: witness = @D.%Inner.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.2: type) { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.1 (constants.%T)] // CHECK:STDOUT: @@ -867,10 +637,6 @@ fn Test() -> i32 { // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: type = interface_decl @Inner [symbolic = @Outer.%Inner.type (constants.%Inner.type.d07)] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [symbolic = @Outer.%C (constants.%C.390)] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer.9d6 [symbolic = @Outer.as.Destroy.impl.%Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Outer.as.Destroy.impl(constants.%T) [symbolic = @Outer.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.52f)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -893,10 +659,6 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Inner.impl_witness_table = impl_witness_table (@C.as.Inner.impl.%C.as.Inner.impl.F.decl), @C.as.Inner.impl [concrete] // CHECK:STDOUT: %Inner.impl_witness: = impl_witness %Inner.impl_witness_table, @C.as.Inner.impl(constants.%T) [symbolic = @C.as.Inner.impl.%Inner.impl_witness (constants.%Inner.impl_witness.50b)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.390 [symbolic = @C.as.Destroy.impl.%C (constants.%C.390)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.44f)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -920,10 +682,6 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Inner.impl_witness_table = impl_witness_table (@D.as.Inner.impl.%D.as.Inner.impl.F.decl), @D.as.Inner.impl [concrete] // CHECK:STDOUT: %Inner.impl_witness: = impl_witness %Inner.impl_witness_table [concrete = constants.%Inner.impl_witness.01d] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -981,32 +739,8 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.390)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.306)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.670)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.306)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Outer.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %ptr: type = ptr_type %Outer [symbolic = %ptr (constants.%ptr.6ff)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.07e)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @D.as.Inner.impl.F(%self.param: %D) -> %i32; // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Test() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -1016,8 +750,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %c.var: ref %C.70f = var %c.var_patt // CHECK:STDOUT: %.loc23_26.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc23_26.2: init %C.70f = class_init (), %c.var [concrete = constants.%C.val] -// CHECK:STDOUT: %.loc23_3: init %C.70f = converted %.loc23_26.1, %.loc23_26.2 [concrete = constants.%C.val] -// CHECK:STDOUT: assign %c.var, %.loc23_3 +// CHECK:STDOUT: %.loc23_3.1: init %C.70f = converted %.loc23_26.1, %.loc23_26.2 [concrete = constants.%C.val] +// CHECK:STDOUT: assign %c.var, %.loc23_3.1 // CHECK:STDOUT: %.loc23_20.1: type = splice_block %C.ref [concrete = constants.%C.70f] { // CHECK:STDOUT: %Outer.ref.loc23: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] // CHECK:STDOUT: %int_32.loc23: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -1042,11 +776,13 @@ fn Test() -> i32 { // CHECK:STDOUT: %bound_method.loc24_33: = bound_method %c.ref, %specific_fn // CHECK:STDOUT: %.loc24_10: %C.70f = bind_value %c.ref // CHECK:STDOUT: %C.as.Inner.impl.F.call: init %i32 = call %bound_method.loc24_33(%.loc24_10) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%C.as.Destroy.impl.Op.ae4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function constants.%C.as.Destroy.impl.Op.ae4, @C.as.Destroy.impl.Op(constants.%i32) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc23: = bound_method %c.var, %C.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C.70f, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc23_3.2: %type_where = converted constants.%C.70f, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.46c +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.46c, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc23: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.18f = addr_of %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc23(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc23(%addr) // CHECK:STDOUT: return %C.as.Inner.impl.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1110,32 +846,6 @@ fn Test() -> i32 { // CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.390 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.44f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.390 -// CHECK:STDOUT: %ptr => constants.%ptr.306 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.670 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.52f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %ptr => constants.%ptr.6ff -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.07e -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Inner.F(constants.%T, constants.%Inner.facet.949) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Inner.type => constants.%Inner.type.d07 @@ -1210,23 +920,6 @@ fn Test() -> i32 { // CHECK:STDOUT: %specific_impl_fn.loc11_41.2 => constants.%C.as.Inner.impl.F.specific_fn // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%i32) { -// CHECK:STDOUT: %T => constants.%i32 -// CHECK:STDOUT: %C => constants.%C.70f -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.d56 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.7b8 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.ae4 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%i32) { -// CHECK:STDOUT: %T => constants.%i32 -// CHECK:STDOUT: %C => constants.%C.70f -// CHECK:STDOUT: %ptr => constants.%ptr.18f -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ba -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Inner.F(constants.%i32, constants.%Inner.facet.3aa) { // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: %Inner.type => constants.%Inner.type.56c diff --git a/toolchain/check/testdata/class/generic/method_deduce.carbon b/toolchain/check/testdata/class/generic/method_deduce.carbon index 0875452de1b9..ab5aecdb0995 100644 --- a/toolchain/check/testdata/class/generic/method_deduce.carbon +++ b/toolchain/check/testdata/class/generic/method_deduce.carbon @@ -32,27 +32,15 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // 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.fe1: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] @@ -64,11 +52,6 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Class.GetNoDeduce.type.766: type = fn_type @Class.GetNoDeduce, @Class(%T) [symbolic] // CHECK:STDOUT: %Class.GetNoDeduce.c9a: %Class.GetNoDeduce.type.766 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.8cc: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.955: type = ptr_type %Class.fe1 [symbolic] -// CHECK:STDOUT: %pattern_type.9e0: type = pattern_type %ptr.955 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.fe1: = require_complete_type %tuple.type.30b [symbolic] // CHECK:STDOUT: %Class.Get.specific_fn.f73: = specific_function %Class.Get.cf9, @Class.Get(%T, %U) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -89,6 +72,13 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %Class.GetNoDeduce.specific_fn.438: = specific_function %Class.GetNoDeduce.162, @Class.GetNoDeduce(%A, %B) [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %A, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d35: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.900: %AggregateT.as_type.as.Destroy.impl.Op.type.d35 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.900, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: %complete_type.56a: = complete_type_witness %tuple.type.cc6 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -161,72 +151,7 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc18_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class.fe1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.8cc)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc18_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = value_param call_param0 -// CHECK:STDOUT: %.loc18_23.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class.fe1)] { -// CHECK:STDOUT: %.loc18_23.3: type = specific_constant constants.%Class.fe1, @Class(constants.%T) [symbolic = %Class (constants.%Class.fe1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc18_23.3 [symbolic = %Class (constants.%Class.fe1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -235,10 +160,6 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -289,10 +210,6 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %return.param: ref @Class.GetNoDeduce.%tuple.type (%tuple.type.30b) = out_param call_param1 // CHECK:STDOUT: %return: ref @Class.GetNoDeduce.%tuple.type (%tuple.type.30b) = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class.fe1 [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class.fe1)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.8cc)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -304,10 +221,6 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @Class.Get(@Class.%T.loc18_13.2: type, %U.loc19_10.2: type) { // CHECK:STDOUT: %U.loc19_10.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc19_10.1 (constants.%U)] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] @@ -359,17 +272,6 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc18_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class.fe1)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.955)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.9e0)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @CallGenericMethod(%c.param: %Class.480) -> %return.param: %tuple.type.cc6 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %c.ref: %Class.480 = name_ref c, %c @@ -397,9 +299,13 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %.loc28_25.5: ref %A = converted %.loc28_25.1, %.loc28_25.4 // CHECK:STDOUT: %.loc28_25.6: %A = bind_value %.loc28_25.5 // CHECK:STDOUT: %Class.GetNoDeduce.call: init %tuple.type.cc6 = call %Class.GetNoDeduce.specific_fn(%.loc28_25.6) to %.loc27_54 -// CHECK:STDOUT: %A.as.Destroy.impl.Op.bound: = bound_method %.loc28_25.4, constants.%A.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%A, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc28_25.7: %type_where = converted constants.%A, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc28_25.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.900 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.900, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc28_25.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.6db = addr_of %.loc28_25.4 -// CHECK:STDOUT: %A.as.Destroy.impl.Op.call: init %empty_tuple.type = call %A.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return %Class.GetNoDeduce.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -441,19 +347,6 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %require_complete.loc20_70 => constants.%require_complete.fe1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Class => constants.%Class.fe1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.8cc -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Class => constants.%Class.fe1 -// CHECK:STDOUT: %ptr => constants.%ptr.955 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9e0 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%A) { // CHECK:STDOUT: %T.loc18_13.1 => constants.%A // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/redeclare.carbon b/toolchain/check/testdata/class/generic/redeclare.carbon index 3cbf30d98297..fb6366f444a9 100644 --- a/toolchain/check/testdata/class/generic/redeclare.carbon +++ b/toolchain/check/testdata/class/generic/redeclare.carbon @@ -103,28 +103,19 @@ class E(U:! type) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] // CHECK:STDOUT: %Generic.type: type = generic_class_type @Generic [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type = struct_value () [concrete] // CHECK:STDOUT: %Generic: type = class_type @Generic, @Generic(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Generic.%Destroy.impl_witness_table, @Generic.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.881: type = ptr_type %Generic [symbolic] -// CHECK:STDOUT: %pattern_type.b64: type = pattern_type %ptr.881 [symbolic] -// CHECK:STDOUT: %Generic.as.Destroy.impl.Op.type: type = fn_type @Generic.as.Destroy.impl.Op, @Generic.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Generic.as.Destroy.impl.Op: %Generic.as.Destroy.impl.Op.type = 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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -134,58 +125,25 @@ 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.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.Self.2: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.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.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.Self.1: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %T.loc6: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Generic.as.Destroy.impl(@Generic.%T.loc6: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Generic: type = class_type @Generic, @Generic(%T) [symbolic = %Generic (constants.%Generic)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Generic.%Destroy.impl_witness_table, @Generic.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Generic.as.Destroy.impl.Op.type: type = fn_type @Generic.as.Destroy.impl.Op, @Generic.as.Destroy.impl(%T) [symbolic = %Generic.as.Destroy.impl.Op.type (constants.%Generic.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Generic.as.Destroy.impl.Op: @Generic.as.Destroy.impl.%Generic.as.Destroy.impl.Op.type (%Generic.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Generic.as.Destroy.impl.Op (constants.%Generic.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Generic.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Generic.as.Destroy.impl.Op.decl: @Generic.as.Destroy.impl.%Generic.as.Destroy.impl.Op.type (%Generic.as.Destroy.impl.Op.type) = fn_decl @Generic.as.Destroy.impl.Op [symbolic = @Generic.as.Destroy.impl.%Generic.as.Destroy.impl.Op (constants.%Generic.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Generic.as.Destroy.impl.Op.%pattern_type (%pattern_type.b64) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Generic.as.Destroy.impl.Op.%pattern_type (%pattern_type.b64) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Generic.as.Destroy.impl.Op.%ptr (%ptr.881) = value_param call_param0 -// CHECK:STDOUT: %.loc6_25.2: type = splice_block %Self.ref [symbolic = %Generic (constants.%Generic)] { -// CHECK:STDOUT: %.loc6_25.3: type = specific_constant constants.%Generic, @Generic(constants.%T) [symbolic = %Generic (constants.%Generic)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_25.3 [symbolic = %Generic (constants.%Generic)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Generic.as.Destroy.impl.Op.%ptr (%ptr.881) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Generic.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Generic.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Generic(%T.loc4_15.2: type) { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Generic [symbolic = @Generic.as.Destroy.impl.%Generic (constants.%Generic)] -// CHECK:STDOUT: impl_decl @Generic.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Generic.as.Destroy.impl.%Generic.as.Destroy.impl.Op.decl), @Generic.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Generic.as.Destroy.impl(constants.%T) [symbolic = @Generic.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -194,34 +152,10 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Generic.as.Destroy.impl.Op(@Generic.%T.loc6: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Generic: type = class_type @Generic, @Generic(%T) [symbolic = %Generic (constants.%Generic)] -// CHECK:STDOUT: %ptr: type = ptr_type %Generic [symbolic = %ptr (constants.%ptr.881)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.b64)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Generic.as.Destroy.impl.Op.%ptr (%ptr.881)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T) { // CHECK:STDOUT: %T.loc4_15.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Generic.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Generic => constants.%Generic -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Generic.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Generic => constants.%Generic -// CHECK:STDOUT: %ptr => constants.%ptr.881 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b64 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_mismatch_param_list.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -229,28 +163,19 @@ class E(U:! type) {} // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] // CHECK:STDOUT: %A.type: type = generic_class_type @A.loc12 [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] // CHECK:STDOUT: %A.130: type = class_type @A.loc12, @A.loc12(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.loc12.%Destroy.impl_witness_table, @A.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.ca9: type = ptr_type %A.130 [symbolic] -// CHECK:STDOUT: %pattern_type.09b: type = pattern_type %ptr.ca9 [symbolic] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op, @A.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -261,42 +186,13 @@ class E(U:! type) {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl.loc4: type = class_decl @A.loc4 [concrete = constants.%A.466] {} {} // CHECK:STDOUT: %A.decl.loc12: %A.type = class_decl @A.loc12 [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %T.loc12_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_9.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @A.as.Destroy.impl(@A.loc12.%T.loc12_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %A: type = class_type @A.loc12, @A.loc12(%T) [symbolic = %A (constants.%A.130)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.loc12.%Destroy.impl_witness_table, @A.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op, @A.as.Destroy.impl(%T) [symbolic = %A.as.Destroy.impl.Op.type (constants.%A.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: @A.as.Destroy.impl.%A.as.Destroy.impl.Op.type (%A.as.Destroy.impl.Op.type) = struct_value () [symbolic = %A.as.Destroy.impl.Op (constants.%A.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @A.loc12.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: @A.as.Destroy.impl.%A.as.Destroy.impl.Op.type (%A.as.Destroy.impl.Op.type) = fn_decl @A.as.Destroy.impl.Op [symbolic = @A.as.Destroy.impl.%A.as.Destroy.impl.Op (constants.%A.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @A.as.Destroy.impl.Op.%pattern_type (%pattern_type.09b) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @A.as.Destroy.impl.Op.%pattern_type (%pattern_type.09b) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @A.as.Destroy.impl.Op.%ptr (%ptr.ca9) = value_param call_param0 -// CHECK:STDOUT: %.loc12_19.2: type = splice_block %Self.ref [symbolic = %A (constants.%A.130)] { -// CHECK:STDOUT: %.loc12_19.3: type = specific_constant constants.%A.130, @A.loc12(constants.%T) [symbolic = %A (constants.%A.130)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc12_19.3 [symbolic = %A (constants.%A.130)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @A.as.Destroy.impl.Op.%ptr (%ptr.ca9) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.loc12.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A.loc4; // CHECK:STDOUT: // CHECK:STDOUT: generic class @A.loc12(%T.loc12_9.2: type) { @@ -305,10 +201,6 @@ class E(U:! type) {} // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A.130 [symbolic = @A.as.Destroy.impl.%A (constants.%A.130)] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @A.as.Destroy.impl(constants.%T) [symbolic = @A.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -317,45 +209,14 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @A.as.Destroy.impl.Op(@A.loc12.%T.loc12_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %A: type = class_type @A.loc12, @A.loc12(%T) [symbolic = %A (constants.%A.130)] -// CHECK:STDOUT: %ptr: type = ptr_type %A [symbolic = %ptr (constants.%ptr.ca9)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.09b)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @A.as.Destroy.impl.Op.%ptr (%ptr.ca9)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @A.loc12(constants.%T) { // CHECK:STDOUT: %T.loc12_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @A.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %A => constants.%A.130 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @A.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %A => constants.%A.130 -// CHECK:STDOUT: %ptr => constants.%ptr.ca9 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.09b -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_mismatch_implicit_param_list.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.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: %type: type = facet_type [concrete] @@ -371,21 +232,13 @@ class E(U:! type) {} // CHECK:STDOUT: %B.type.844c0f.2: type = generic_class_type @B.loc14 [concrete] // CHECK:STDOUT: %B.generic.ba299b.2: %B.type.844c0f.2 = struct_value () [concrete] // CHECK:STDOUT: %B.828: type = class_type @B.loc14, @B.loc14(%T, %N.f22) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.b10: = impl_witness @B.loc14.%Destroy.impl_witness_table, @B.as.Destroy.impl(%T, %N.f22) [symbolic] -// CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] -// CHECK:STDOUT: %ptr.9e8: type = ptr_type %B.828 [symbolic] -// CHECK:STDOUT: %pattern_type.a6d: type = pattern_type %ptr.9e8 [symbolic] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op, @B.as.Destroy.impl(%T, %N.f22) [symbolic] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -419,57 +272,7 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @B.as.Destroy.impl(@B.loc14.%T.loc14_9.2: type, @B.loc14.%N.loc14_19.2: @B.loc14.%T.loc14_9.1 (%T)) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: @B.as.Destroy.impl.%T (%T) = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.f22)] -// CHECK:STDOUT: %B: type = class_type @B.loc14, @B.loc14(%T, %N) [symbolic = %B (constants.%B.828)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @B.loc14.%Destroy.impl_witness_table, @B.as.Destroy.impl(%T, %N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.b10)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op, @B.as.Destroy.impl(%T, %N) [symbolic = %B.as.Destroy.impl.Op.type (constants.%B.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: @B.as.Destroy.impl.%B.as.Destroy.impl.Op.type (%B.as.Destroy.impl.Op.type) = struct_value () [symbolic = %B.as.Destroy.impl.Op (constants.%B.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @B.loc14.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: @B.as.Destroy.impl.%B.as.Destroy.impl.Op.type (%B.as.Destroy.impl.Op.type) = fn_decl @B.as.Destroy.impl.Op [symbolic = @B.as.Destroy.impl.%B.as.Destroy.impl.Op (constants.%B.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @B.as.Destroy.impl.Op.%pattern_type (%pattern_type.a6d) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @B.as.Destroy.impl.Op.%pattern_type (%pattern_type.a6d) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc14_26.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @B.as.Destroy.impl.Op.%ptr (%ptr.9e8) = value_param call_param0 -// CHECK:STDOUT: %.loc14_26.2: type = splice_block %Self.ref [symbolic = %B (constants.%B.828)] { -// CHECK:STDOUT: %.loc14_26.3: type = specific_constant constants.%B.828, @B.loc14(constants.%T, constants.%N.f22) [symbolic = %B (constants.%B.828)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc14_26.3 [symbolic = %B (constants.%B.828)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @B.as.Destroy.impl.Op.%ptr (%ptr.9e8) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.loc14.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -489,13 +292,8 @@ class E(U:! type) {} // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc14_9.1 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %T.loc14_9.1 [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B.828 [symbolic = @B.as.Destroy.impl.%B (constants.%B.828)] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @B.as.Destroy.impl(constants.%T, constants.%N.f22) [symbolic = @B.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.b10)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -504,20 +302,6 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @B.as.Destroy.impl.Op(@B.loc14.%T.loc14_9.2: type, @B.loc14.%N.loc14_19.2: @B.loc14.%T.loc14_9.1 (%T)) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %N: @B.as.Destroy.impl.Op.%T (%T) = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.f22)] -// CHECK:STDOUT: %B: type = class_type @B.loc14, @B.loc14(%T, %N) [symbolic = %B (constants.%B.828)] -// CHECK:STDOUT: %ptr: type = ptr_type %B [symbolic = %ptr (constants.%ptr.9e8)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.a6d)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @B.as.Destroy.impl.Op.%ptr (%ptr.9e8)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @B.loc6(constants.%N.9e6) { // CHECK:STDOUT: %N.loc6_9.1 => constants.%N.9e6 // CHECK:STDOUT: } @@ -528,32 +312,10 @@ class E(U:! type) {} // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @B.as.Destroy.impl(constants.%T, constants.%N.f22) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.f22 -// CHECK:STDOUT: %B => constants.%B.828 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.b10 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @B.as.Destroy.impl.Op(constants.%T, constants.%N.f22) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %N => constants.%N.f22 -// CHECK:STDOUT: %B => constants.%B.828 -// CHECK:STDOUT: %ptr => constants.%ptr.9e8 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a6d -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_mismatch_param_count.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.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: %type: type = facet_type [concrete] @@ -567,20 +329,13 @@ class E(U:! type) {} // CHECK:STDOUT: %C.type.e6e560.2: type = generic_class_type @C.loc14 [concrete] // CHECK:STDOUT: %C.generic.965b12.2: %C.type.e6e560.2 = struct_value () [concrete] // CHECK:STDOUT: %C.3d8: type = class_type @C.loc14, @C.loc14(%T, %U) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.d1b: = impl_witness @C.loc14.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T, %U) [symbolic] -// CHECK:STDOUT: %ptr.8f5: type = ptr_type %C.3d8 [symbolic] -// CHECK:STDOUT: %pattern_type.d5b: type = pattern_type %ptr.8f5 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T, %U) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -611,57 +366,7 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.loc14.%T.loc14_9.2: type, @C.loc14.%U.loc14_19.2: %A) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %U: %A = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %C: type = class_type @C.loc14, @C.loc14(%T, %U) [symbolic = %C (constants.%C.3d8)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.loc14.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T, %U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.d1b)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T, %U) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.loc14.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d5b) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d5b) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc14_26.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.8f5) = value_param call_param0 -// CHECK:STDOUT: %.loc14_26.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.3d8)] { -// CHECK:STDOUT: %.loc14_26.3: type = specific_constant constants.%C.3d8, @C.loc14(constants.%T, constants.%U) [symbolic = %C (constants.%C.3d8)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc14_26.3 [symbolic = %C (constants.%C.3d8)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.8f5) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.loc14.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -682,10 +387,6 @@ class E(U:! type) {} // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.3d8 [symbolic = @C.as.Destroy.impl.%C (constants.%C.3d8)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T, constants.%U) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.d1b)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -694,20 +395,6 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.loc14.%T.loc14_9.2: type, @C.loc14.%U.loc14_19.2: %A) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %U: %A = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %C: type = class_type @C.loc14, @C.loc14(%T, %U) [symbolic = %C (constants.%C.3d8)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.8f5)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d5b)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.8f5)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C.loc6(constants.%T) { // CHECK:STDOUT: %T.loc6_9.1 => constants.%T // CHECK:STDOUT: } @@ -717,32 +404,10 @@ class E(U:! type) {} // CHECK:STDOUT: %U.loc14_19.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T, constants.%U) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %C => constants.%C.3d8 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.d1b -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T, constants.%U) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %C => constants.%C.3d8 -// CHECK:STDOUT: %ptr => constants.%ptr.8f5 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d5b -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_mismatch_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.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: %type: type = facet_type [concrete] @@ -756,20 +421,13 @@ class E(U:! type) {} // CHECK:STDOUT: %D.type.bbd080.2: type = generic_class_type @D.loc14 [concrete] // CHECK:STDOUT: %D.generic.4e2319.2: %D.type.bbd080.2 = struct_value () [concrete] // CHECK:STDOUT: %D.384: type = class_type @D.loc14, @D.loc14(%T.9e6) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.a08: = impl_witness @D.loc14.%Destroy.impl_witness_table, @D.as.Destroy.impl(%T.9e6) [symbolic] -// CHECK:STDOUT: %ptr.988: type = ptr_type %D.384 [symbolic] -// CHECK:STDOUT: %pattern_type.146: type = pattern_type %ptr.988 [symbolic] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op, @D.as.Destroy.impl(%T.9e6) [symbolic] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -797,56 +455,7 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @D.as.Destroy.impl(@D.loc14.%T.loc14_9.2: %A) { -// CHECK:STDOUT: %T: %A = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.9e6)] -// CHECK:STDOUT: %D: type = class_type @D.loc14, @D.loc14(%T) [symbolic = %D (constants.%D.384)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.loc14.%Destroy.impl_witness_table, @D.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.a08)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op, @D.as.Destroy.impl(%T) [symbolic = %D.as.Destroy.impl.Op.type (constants.%D.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: @D.as.Destroy.impl.%D.as.Destroy.impl.Op.type (%D.as.Destroy.impl.Op.type) = struct_value () [symbolic = %D.as.Destroy.impl.Op (constants.%D.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @D.loc14.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: @D.as.Destroy.impl.%D.as.Destroy.impl.Op.type (%D.as.Destroy.impl.Op.type) = fn_decl @D.as.Destroy.impl.Op [symbolic = @D.as.Destroy.impl.%D.as.Destroy.impl.Op (constants.%D.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @D.as.Destroy.impl.Op.%pattern_type (%pattern_type.146) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @D.as.Destroy.impl.Op.%pattern_type (%pattern_type.146) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc14_16.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @D.as.Destroy.impl.Op.%ptr (%ptr.988) = value_param call_param0 -// CHECK:STDOUT: %.loc14_16.2: type = splice_block %Self.ref [symbolic = %D (constants.%D.384)] { -// CHECK:STDOUT: %.loc14_16.3: type = specific_constant constants.%D.384, @D.loc14(constants.%T.9e6) [symbolic = %D (constants.%D.384)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc14_16.3 [symbolic = %D (constants.%D.384)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @D.as.Destroy.impl.Op.%ptr (%ptr.988) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.loc14.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -866,10 +475,6 @@ class E(U:! type) {} // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D.384 [symbolic = @D.as.Destroy.impl.%D (constants.%D.384)] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @D.as.Destroy.impl(constants.%T.9e6) [symbolic = @D.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.a08)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -878,19 +483,6 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @D.as.Destroy.impl.Op(@D.loc14.%T.loc14_9.2: %A) { -// CHECK:STDOUT: %T: %A = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.9e6)] -// CHECK:STDOUT: %D: type = class_type @D.loc14, @D.loc14(%T) [symbolic = %D (constants.%D.384)] -// CHECK:STDOUT: %ptr: type = ptr_type %D [symbolic = %ptr (constants.%ptr.988)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.146)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @D.as.Destroy.impl.Op.%ptr (%ptr.988)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @D.loc6(constants.%T.8b3) { // CHECK:STDOUT: %T.loc6_9.1 => constants.%T.8b3 // CHECK:STDOUT: } @@ -899,50 +491,28 @@ class E(U:! type) {} // CHECK:STDOUT: %T.loc14_9.1 => constants.%T.9e6 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @D.as.Destroy.impl(constants.%T.9e6) { -// CHECK:STDOUT: %T => constants.%T.9e6 -// CHECK:STDOUT: %D => constants.%D.384 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.a08 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @D.as.Destroy.impl.Op(constants.%T.9e6) { -// CHECK:STDOUT: %T => constants.%T.9e6 -// CHECK:STDOUT: %D => constants.%D.384 -// CHECK:STDOUT: %ptr => constants.%ptr.988 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.146 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_mismatch_param_name.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] // CHECK:STDOUT: %E.type.b0f8dc.1: type = generic_class_type @E.loc4 [concrete] // CHECK:STDOUT: %E.generic.f281ba.1: %E.type.b0f8dc.1 = struct_value () [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] // CHECK:STDOUT: %E.type.b0f8dc.2: type = generic_class_type @E.loc12 [concrete] // CHECK:STDOUT: %E.generic.f281ba.2: %E.type.b0f8dc.2 = struct_value () [concrete] // CHECK:STDOUT: %E.ec9c10.2: type = class_type @E.loc12, @E.loc12(%U) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @E.loc12.%Destroy.impl_witness_table, @E.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %ptr.878: type = ptr_type %E.ec9c10.2 [symbolic] -// CHECK:STDOUT: %pattern_type.3d9: type = pattern_type %ptr.878 [symbolic] -// CHECK:STDOUT: %E.as.Destroy.impl.Op.type: type = fn_type @E.as.Destroy.impl.Op, @E.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %E.as.Destroy.impl.Op: %E.as.Destroy.impl.Op.type = 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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -952,48 +522,19 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %E.decl.loc4: %E.type.b0f8dc.1 = class_decl @E.loc4 [concrete = constants.%E.generic.f281ba.1] { -// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %E.decl.loc12: %E.type.b0f8dc.2 = class_decl @E.loc12 [concrete = constants.%E.generic.f281ba.2] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %U.loc12_9.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc12_9.1 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @E.as.Destroy.impl(@E.loc12.%U.loc12_9.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %E: type = class_type @E.loc12, @E.loc12(%U) [symbolic = %E (constants.%E.ec9c10.2)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @E.loc12.%Destroy.impl_witness_table, @E.as.Destroy.impl(%U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %E.as.Destroy.impl.Op.type: type = fn_type @E.as.Destroy.impl.Op, @E.as.Destroy.impl(%U) [symbolic = %E.as.Destroy.impl.Op.type (constants.%E.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %E.as.Destroy.impl.Op: @E.as.Destroy.impl.%E.as.Destroy.impl.Op.type (%E.as.Destroy.impl.Op.type) = struct_value () [symbolic = %E.as.Destroy.impl.Op (constants.%E.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @E.loc12.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %E.as.Destroy.impl.Op.decl: @E.as.Destroy.impl.%E.as.Destroy.impl.Op.type (%E.as.Destroy.impl.Op.type) = fn_decl @E.as.Destroy.impl.Op [symbolic = @E.as.Destroy.impl.%E.as.Destroy.impl.Op (constants.%E.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @E.as.Destroy.impl.Op.%pattern_type (%pattern_type.3d9) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @E.as.Destroy.impl.Op.%pattern_type (%pattern_type.3d9) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @E.as.Destroy.impl.Op.%ptr (%ptr.878) = value_param call_param0 -// CHECK:STDOUT: %.loc12_19.2: type = splice_block %Self.ref [symbolic = %E (constants.%E.ec9c10.2)] { -// CHECK:STDOUT: %.loc12_19.3: type = specific_constant constants.%E.ec9c10.2, @E.loc12(constants.%U) [symbolic = %E (constants.%E.ec9c10.2)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc12_19.3 [symbolic = %E (constants.%E.ec9c10.2)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @E.as.Destroy.impl.Op.%ptr (%ptr.878) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %E.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @E.loc12.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @E.loc4(%T.loc4_9.2: type) { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: @@ -1006,10 +547,6 @@ class E(U:! type) {} // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E.ec9c10.2 [symbolic = @E.as.Destroy.impl.%E (constants.%E.ec9c10.2)] -// CHECK:STDOUT: impl_decl @E.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@E.as.Destroy.impl.%E.as.Destroy.impl.Op.decl), @E.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @E.as.Destroy.impl(constants.%U) [symbolic = @E.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1018,17 +555,6 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @E.as.Destroy.impl.Op(@E.loc12.%U.loc12_9.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %E: type = class_type @E.loc12, @E.loc12(%U) [symbolic = %E (constants.%E.ec9c10.2)] -// CHECK:STDOUT: %ptr: type = ptr_type %E [symbolic = %ptr (constants.%ptr.878)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.3d9)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @E.as.Destroy.impl.Op.%ptr (%ptr.878)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @E.loc4(constants.%T) { // CHECK:STDOUT: %T.loc4_9.1 => constants.%T // CHECK:STDOUT: } @@ -1037,16 +563,3 @@ class E(U:! type) {} // CHECK:STDOUT: %U.loc12_9.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @E.as.Destroy.impl(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %E => constants.%E.ec9c10.2 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @E.as.Destroy.impl.Op(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %E => constants.%E.ec9c10.2 -// CHECK:STDOUT: %ptr => constants.%ptr.878 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3d9 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/self.carbon b/toolchain/check/testdata/class/generic/self.carbon index 594d43f77b12..05881a9d090d 100644 --- a/toolchain/check/testdata/class/generic/self.carbon +++ b/toolchain/check/testdata/class/generic/self.carbon @@ -41,24 +41,23 @@ class Class(T:! type) { // CHECK:STDOUT: %Class.MakeClass: %Class.MakeClass.type = struct_value () [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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.8cc: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.955: type = ptr_type %Class [symbolic] -// CHECK:STDOUT: %pattern_type.9e0: type = pattern_type %ptr.955 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Class, (%Destroy.impl_witness.8cc) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %require_complete.4f8: = require_complete_type %Class [symbolic] // CHECK:STDOUT: %Class.val: %Class = struct_value () [symbolic] // CHECK:STDOUT: %Class.MakeSelf.specific_fn: = specific_function %Class.MakeSelf, @Class.MakeSelf(%T) [symbolic] // CHECK:STDOUT: %Class.MakeClass.specific_fn: = specific_function %Class.MakeClass, @Class.MakeClass(%T) [symbolic] -// CHECK:STDOUT: %.856: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.specific_fn: = specific_function %Class.as.Destroy.impl.Op, @Class.as.Destroy.impl.Op(%T) [symbolic] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Class, () [symbolic] +// CHECK:STDOUT: %ptr.955: type = ptr_type %Class [symbolic] // CHECK:STDOUT: %require_complete.2ae: = require_complete_type %ptr.955 [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.576: = lookup_impl_witness %Class, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Class, (%Destroy.lookup_impl_witness.576) [symbolic] +// CHECK:STDOUT: %.124: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet [symbolic] +// CHECK:STDOUT: %impl.elem0.d11: %.124 = impl_witness_access %Destroy.lookup_impl_witness.576, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.b34: = specific_impl_function %impl.elem0.d11, @Destroy.Op(%Destroy.facet) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -84,35 +83,6 @@ class Class(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc15_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.8cc)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = value_param call_param0 -// CHECK:STDOUT: %.loc15_23.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc15_23.3: type = specific_constant constants.%Class, @Class(constants.%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc15_23.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc15_13.2: type) { // CHECK:STDOUT: %T.loc15_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_13.1 (constants.%T)] // CHECK:STDOUT: @@ -145,10 +115,6 @@ class Class(T:! type) { // CHECK:STDOUT: %return: ref @Class.MakeClass.%Class.loc19_28.1 (%Class) = return_slot %return.param // CHECK:STDOUT: } // 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.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.8cc)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -210,12 +176,12 @@ class Class(T:! type) { // 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_19.2: = specific_function %Class.MakeClass, @Class.MakeClass(%T) [symbolic = %Class.MakeClass.specific_fn.loc22_19.2 (constants.%Class.MakeClass.specific_fn)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.8cc)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Class.loc21_19.2, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)] -// CHECK:STDOUT: %.loc22_5.2: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc22_5.2 (constants.%.856)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.F.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.specific_fn: = specific_function %Class.as.Destroy.impl.Op, @Class.as.Destroy.impl.Op(%T) [symbolic = %Class.as.Destroy.impl.Op.specific_fn (constants.%Class.as.Destroy.impl.Op.specific_fn)] +// CHECK:STDOUT: %facet_value.loc22_5.2: %type_where = facet_value %Class.loc21_19.2, () [symbolic = %facet_value.loc22_5.2 (constants.%facet_value)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Class.loc21_19.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.576)] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Class.loc21_19.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)] +// CHECK:STDOUT: %.loc22_5.4: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc22_5.4 (constants.%.124)] +// CHECK:STDOUT: %impl.elem0.loc22_5.2: @Class.F.%.loc22_5.4 (%.124) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.2 (constants.%impl.elem0.d11)] +// CHECK:STDOUT: %specific_impl_fn.loc22_5.2: = specific_impl_function %impl.elem0.loc22_5.2, @Destroy.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc22_5.2 (constants.%specific_impl_fn.b34)] // CHECK:STDOUT: %ptr: type = ptr_type %Class.loc21_19.2 [symbolic = %ptr (constants.%ptr.955)] // CHECK:STDOUT: %require_complete.loc22: = require_complete_type %ptr [symbolic = %require_complete.loc22 (constants.%require_complete.2ae)] // CHECK:STDOUT: @@ -229,8 +195,8 @@ class Class(T:! type) { // CHECK:STDOUT: %.loc21_23: @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_23 [symbolic = %Class.MakeSelf (constants.%Class.MakeSelf)] // CHECK:STDOUT: %Class.MakeSelf.specific_fn.loc21_23.1: = specific_function %MakeSelf.ref, @Class.MakeSelf(constants.%T) [symbolic = %Class.MakeSelf.specific_fn.loc21_23.2 (constants.%Class.MakeSelf.specific_fn)] -// CHECK:STDOUT: %.loc21_5: ref @Class.F.%Class.loc21_19.2 (%Class) = splice_block %c.var {} -// CHECK:STDOUT: %Class.MakeSelf.call: init @Class.F.%Class.loc21_19.2 (%Class) = call %Class.MakeSelf.specific_fn.loc21_23.1() to %.loc21_5 +// CHECK:STDOUT: %.loc21_5.1: ref @Class.F.%Class.loc21_19.2 (%Class) = splice_block %c.var {} +// CHECK:STDOUT: %Class.MakeSelf.call: init @Class.F.%Class.loc21_19.2 (%Class) = call %Class.MakeSelf.specific_fn.loc21_23.1() to %.loc21_5.1 // CHECK:STDOUT: assign %c.var, %Class.MakeSelf.call // CHECK:STDOUT: %.loc21_19: type = splice_block %Class.loc21_19.1 [symbolic = %Class.loc21_19.2 (constants.%Class)] { // CHECK:STDOUT: %Class.ref: %Class.type = name_ref Class, file.%Class.decl [concrete = constants.%Class.generic] @@ -254,33 +220,26 @@ class Class(T:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc22_12.2 [symbolic = %Class.loc21_19.2 (constants.%Class)] // CHECK:STDOUT: } // CHECK:STDOUT: %s: ref @Class.F.%Class.loc21_19.2 (%Class) = bind_name s, %s.var -// CHECK:STDOUT: %impl.elem0.loc22: @Class.F.%.loc22_5.2 (%.856) = impl_witness_access constants.%Destroy.impl_witness.8cc, element0 [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: %bound_method.loc22_5.1: = bound_method %s.var, %impl.elem0.loc22 -// CHECK:STDOUT: %specific_fn.loc22: = specific_function %impl.elem0.loc22, @Class.as.Destroy.impl.Op(constants.%T) [symbolic = %Class.as.Destroy.impl.Op.specific_fn (constants.%Class.as.Destroy.impl.Op.specific_fn)] -// CHECK:STDOUT: %bound_method.loc22_5.2: = bound_method %s.var, %specific_fn.loc22 +// CHECK:STDOUT: %facet_value.loc22_5.1: %type_where = facet_value constants.%Class, () [symbolic = %facet_value.loc22_5.2 (constants.%facet_value)] +// CHECK:STDOUT: %.loc22_5.2: %type_where = converted constants.%Class, %facet_value.loc22_5.1 [symbolic = %facet_value.loc22_5.2 (constants.%facet_value)] +// CHECK:STDOUT: %impl.elem0.loc22_5.1: @Class.F.%.loc22_5.4 (%.124) = impl_witness_access constants.%Destroy.lookup_impl_witness.576, element0 [symbolic = %impl.elem0.loc22_5.2 (constants.%impl.elem0.d11)] +// CHECK:STDOUT: %bound_method.loc22_5.1: = bound_method %s.var, %impl.elem0.loc22_5.1 +// CHECK:STDOUT: %specific_impl_fn.loc22_5.1: = specific_impl_function %impl.elem0.loc22_5.1, @Destroy.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_5.2 (constants.%specific_impl_fn.b34)] +// CHECK:STDOUT: %bound_method.loc22_5.2: = bound_method %s.var, %specific_impl_fn.loc22_5.1 // CHECK:STDOUT: %addr.loc22: @Class.F.%ptr (%ptr.955) = addr_of %s.var -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22_5.2(%addr.loc22) -// CHECK:STDOUT: %impl.elem0.loc21: @Class.F.%.loc22_5.2 (%.856) = impl_witness_access constants.%Destroy.impl_witness.8cc, element0 [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] +// CHECK:STDOUT: %.loc22_5.3: init %empty_tuple.type = call %bound_method.loc22_5.2(%addr.loc22) +// CHECK:STDOUT: %facet_value.loc21: %type_where = facet_value constants.%Class, () [symbolic = %facet_value.loc22_5.2 (constants.%facet_value)] +// CHECK:STDOUT: %.loc21_5.2: %type_where = converted constants.%Class, %facet_value.loc21 [symbolic = %facet_value.loc22_5.2 (constants.%facet_value)] +// CHECK:STDOUT: %impl.elem0.loc21: @Class.F.%.loc22_5.4 (%.124) = impl_witness_access constants.%Destroy.lookup_impl_witness.576, element0 [symbolic = %impl.elem0.loc22_5.2 (constants.%impl.elem0.d11)] // CHECK:STDOUT: %bound_method.loc21_5.1: = bound_method %c.var, %impl.elem0.loc21 -// CHECK:STDOUT: %specific_fn.loc21: = specific_function %impl.elem0.loc21, @Class.as.Destroy.impl.Op(constants.%T) [symbolic = %Class.as.Destroy.impl.Op.specific_fn (constants.%Class.as.Destroy.impl.Op.specific_fn)] -// CHECK:STDOUT: %bound_method.loc21_5.2: = bound_method %c.var, %specific_fn.loc21 +// CHECK:STDOUT: %specific_impl_fn.loc21: = specific_impl_function %impl.elem0.loc21, @Destroy.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_5.2 (constants.%specific_impl_fn.b34)] +// CHECK:STDOUT: %bound_method.loc21_5.2: = bound_method %c.var, %specific_impl_fn.loc21 // CHECK:STDOUT: %addr.loc21: @Class.F.%ptr (%ptr.955) = addr_of %c.var -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call.loc21: init %empty_tuple.type = call %bound_method.loc21_5.2(%addr.loc21) +// CHECK:STDOUT: %.loc21_5.3: init %empty_tuple.type = call %bound_method.loc21_5.2(%addr.loc21) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc15_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.955)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.9e0)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T) { // CHECK:STDOUT: %T.loc15_13.1 => constants.%T // CHECK:STDOUT: @@ -315,20 +274,3 @@ class Class(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Class.F(constants.%T) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.8cc -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type => constants.%Class.as.Destroy.impl.Op.type -// CHECK:STDOUT: %Class.as.Destroy.impl.Op => constants.%Class.as.Destroy.impl.Op -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.955 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9e0 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/stringify.carbon b/toolchain/check/testdata/class/generic/stringify.carbon index 2f953a3ae6df..2ff0f9829f74 100644 --- a/toolchain/check/testdata/class/generic/stringify.carbon +++ b/toolchain/check/testdata/class/generic/stringify.carbon @@ -96,23 +96,11 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %NoParams: type = class_type @NoParams [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.007: = impl_witness @NoParams.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.4c4: type = ptr_type %NoParams [concrete] -// CHECK:STDOUT: %pattern_type.105: type = pattern_type %ptr.4c4 [concrete] -// CHECK:STDOUT: %NoParams.as.Destroy.impl.Op.type: type = fn_type @NoParams.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %NoParams.as.Destroy.impl.Op: %NoParams.as.Destroy.impl.Op.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: %EmptyParams.type: type = generic_class_type @EmptyParams [concrete] // CHECK:STDOUT: %EmptyParams.generic: %EmptyParams.type = struct_value () [concrete] // CHECK:STDOUT: %EmptyParams: type = class_type @EmptyParams [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ab8: = impl_witness @EmptyParams.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.3ae: type = ptr_type %EmptyParams [concrete] -// CHECK:STDOUT: %pattern_type.73b: type = pattern_type %ptr.3ae [concrete] -// CHECK:STDOUT: %EmptyParams.as.Destroy.impl.Op.type: type = fn_type @EmptyParams.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %EmptyParams.as.Destroy.impl.Op: %EmptyParams.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.32d: type = pattern_type %NoParams [concrete] // CHECK:STDOUT: %pattern_type.71c: type = pattern_type %EmptyParams [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] @@ -121,12 +109,10 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -160,43 +146,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %w: ref %EmptyParams = bind_name w, %w.var [concrete = %w.var] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @NoParams.as.Destroy.impl: @NoParams.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %NoParams.as.Destroy.impl.Op.decl: %NoParams.as.Destroy.impl.Op.type = fn_decl @NoParams.as.Destroy.impl.Op [concrete = constants.%NoParams.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.105 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.105 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.4c4 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NoParams [concrete = constants.%NoParams] -// CHECK:STDOUT: %self: %ptr.4c4 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %NoParams.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @NoParams.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @EmptyParams.as.Destroy.impl: @EmptyParams.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %EmptyParams.as.Destroy.impl.Op.decl: %EmptyParams.as.Destroy.impl.Op.type = fn_decl @EmptyParams.as.Destroy.impl.Op [concrete = constants.%EmptyParams.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.73b = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.73b = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.3ae = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%EmptyParams [concrete = constants.%EmptyParams] -// CHECK:STDOUT: %self: %ptr.3ae = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %EmptyParams.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @EmptyParams.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @NoParams { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NoParams [concrete = constants.%NoParams] -// CHECK:STDOUT: impl_decl @NoParams.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@NoParams.as.Destroy.impl.%NoParams.as.Destroy.impl.Op.decl), @NoParams.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.007] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -205,10 +155,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @EmptyParams { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%EmptyParams [concrete = constants.%EmptyParams] -// CHECK:STDOUT: impl_decl @EmptyParams.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@EmptyParams.as.Destroy.impl.%EmptyParams.as.Destroy.impl.Op.decl), @EmptyParams.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ab8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -216,10 +162,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: .Self = constants.%EmptyParams // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @NoParams.as.Destroy.impl.Op(%self.param: %ptr.4c4) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @EmptyParams.as.Destroy.impl.Op(%self.param: %ptr.3ae) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %v.ref: ref %NoParams = name_ref v, file.%v [concrete = file.%v.var] @@ -242,20 +184,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %Inner.type.eae: type = generic_class_type @Inner, @Outer(%T) [symbolic] // CHECK:STDOUT: %Inner.generic.137: %Inner.type.eae = struct_value () [symbolic] // CHECK:STDOUT: %Inner.c71: type = class_type @Inner, @Inner(%T, %U) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7f3: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%T, %U) [symbolic] -// CHECK:STDOUT: %ptr.276: type = ptr_type %Inner.c71 [symbolic] -// CHECK:STDOUT: %pattern_type.01f: type = pattern_type %ptr.276 [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%T, %U) [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: %Inner.as.Destroy.impl.Op.type = 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: %Destroy.impl_witness.52f: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.6ff: type = ptr_type %Outer.9d6 [symbolic] -// CHECK:STDOUT: %pattern_type.07e: type = pattern_type %ptr.6ff [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] // CHECK:STDOUT: %Outer.614: type = class_type @Outer, @Outer(%ptr.c28) [concrete] // CHECK:STDOUT: %Inner.type.5d2: type = generic_class_type @Inner, @Outer(%ptr.c28) [concrete] @@ -275,13 +205,11 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } @@ -335,65 +263,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %w: ref %Inner.277 = bind_name w, %w.var [concrete = %w.var] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Inner.as.Destroy.impl(@Outer.%T.loc4_13.2: type, @Inner.%U.loc5_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T, %U) [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%T, %U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.7f3)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%T, %U) [symbolic = %Inner.as.Destroy.impl.Op.type (constants.%Inner.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Inner.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.decl: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type) = fn_decl @Inner.as.Destroy.impl.Op [symbolic = @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.01f) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.01f) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.276) = value_param call_param0 -// CHECK:STDOUT: %.loc5_25.2: type = splice_block %Self.ref [symbolic = %Inner (constants.%Inner.c71)] { -// CHECK:STDOUT: %.loc5_25.3: type = specific_constant constants.%Inner.c71, @Inner(constants.%T, constants.%U) [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_25.3 [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Inner.as.Destroy.impl.Op.%ptr (%ptr.276) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Inner.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Inner.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Outer.as.Destroy.impl(@Outer.%T.loc4_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.52f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T) [symbolic = %Outer.as.Destroy.impl.Op.type (constants.%Outer.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = fn_decl @Outer.as.Destroy.impl.Op [symbolic = @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = value_param call_param0 -// CHECK:STDOUT: %.loc4_23.2: type = splice_block %Self.ref [symbolic = %Outer (constants.%Outer.9d6)] { -// CHECK:STDOUT: %.loc4_23.3: type = specific_constant constants.%Outer.9d6, @Outer(constants.%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_23.3 [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.2: type) { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.1 (constants.%T)] // CHECK:STDOUT: @@ -408,10 +277,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %U.loc5_15.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc5_15.1 (constants.%U)] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer.9d6 [symbolic = @Outer.as.Destroy.impl.%Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Outer.as.Destroy.impl(constants.%T) [symbolic = @Outer.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.52f)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -427,10 +292,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner.c71 [symbolic = @Inner.as.Destroy.impl.%Inner (constants.%Inner.c71)] -// CHECK:STDOUT: impl_decl @Inner.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.decl), @Inner.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Inner.as.Destroy.impl(constants.%T, constants.%U) [symbolic = @Inner.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.7f3)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -439,29 +300,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Inner.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: type, @Inner.%U.loc5_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T, %U) [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: %ptr: type = ptr_type %Inner [symbolic = %ptr (constants.%ptr.276)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.01f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.276)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Outer.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %ptr: type = ptr_type %Outer [symbolic = %ptr (constants.%ptr.6ff)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.07e)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %v.ref: ref %Outer.614 = name_ref v, file.%v [concrete = file.%v.var] @@ -478,34 +316,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %U.loc5_15.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl(constants.%T, constants.%U) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %Inner => constants.%Inner.c71 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.7f3 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl.Op(constants.%T, constants.%U) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %Inner => constants.%Inner.c71 -// CHECK:STDOUT: %ptr => constants.%ptr.276 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.01f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.52f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %ptr => constants.%ptr.6ff -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.07e -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%ptr.c28) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%ptr.c28 // CHECK:STDOUT: @@ -535,13 +345,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.506: type = class_type @C, @C(%N.51e) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %ptr.128: type = ptr_type %C.506 [symbolic] -// CHECK:STDOUT: %pattern_type.d64: type = pattern_type %ptr.128 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %int_123.fff: Core.IntLiteral = int_value 123 [concrete] @@ -568,13 +371,11 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -617,45 +418,12 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %v: ref %C.4c3 = bind_name v, %v.var [concrete = %v.var] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%N.loc4_9.2: %i32) { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%N) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%N) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d64) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d64) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_18.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.128) = value_param call_param0 -// CHECK:STDOUT: %.loc4_18.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.506)] { -// CHECK:STDOUT: %.loc4_18.3: type = specific_constant constants.%C.506, @C(constants.%N.51e) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_18.3 [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.128) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%N.loc4_9.2: %i32) { // CHECK:STDOUT: %N.loc4_9.1: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc4_9.1 (constants.%N.51e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.506 [symbolic = @C.as.Destroy.impl.%C (constants.%C.506)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%N.51e) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -664,17 +432,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%N.loc4_9.2: %i32) { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%N) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.128)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d64)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.128)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc13_18: %empty_tuple.type = tuple_literal () @@ -687,19 +444,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %N.loc4_9.1 => constants.%N.51e // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %C => constants.%C.506 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %C => constants.%C.506 -// CHECK:STDOUT: %ptr => constants.%ptr.128 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d64 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_123.f7f) { // CHECK:STDOUT: %N.loc4_9.1 => constants.%int_123.f7f // CHECK:STDOUT: @@ -715,13 +459,6 @@ 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: %D.elem: type = unbound_element_type %D, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] @@ -731,11 +468,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %E.type: type = generic_class_type @E [concrete] // CHECK:STDOUT: %E.generic: %E.type = struct_value () [concrete] // CHECK:STDOUT: %E: type = class_type @E, @E(%F) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.520: = impl_witness @E.%Destroy.impl_witness_table, @E.as.Destroy.impl(%F) [symbolic] -// CHECK:STDOUT: %ptr.4e0: type = ptr_type %E [symbolic] -// CHECK:STDOUT: %pattern_type.72c: type = pattern_type %ptr.4e0 [symbolic] -// CHECK:STDOUT: %E.as.Destroy.impl.Op.type: type = fn_type @E.as.Destroy.impl.Op, @E.as.Destroy.impl(%F) [symbolic] -// CHECK:STDOUT: %E.as.Destroy.impl.Op: %E.as.Destroy.impl.Op.type = 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: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -775,13 +507,11 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -840,51 +570,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %g: = bind_name g, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @E.as.Destroy.impl(@E.%F.loc9_9.2: %D) { -// CHECK:STDOUT: %F: %D = bind_symbolic_name F, 0 [symbolic = %F (constants.%F)] -// CHECK:STDOUT: %E: type = class_type @E, @E(%F) [symbolic = %E (constants.%E)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @E.%Destroy.impl_witness_table, @E.as.Destroy.impl(%F) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.520)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %E.as.Destroy.impl.Op.type: type = fn_type @E.as.Destroy.impl.Op, @E.as.Destroy.impl(%F) [symbolic = %E.as.Destroy.impl.Op.type (constants.%E.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %E.as.Destroy.impl.Op: @E.as.Destroy.impl.%E.as.Destroy.impl.Op.type (%E.as.Destroy.impl.Op.type) = struct_value () [symbolic = %E.as.Destroy.impl.Op (constants.%E.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @E.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %E.as.Destroy.impl.Op.decl: @E.as.Destroy.impl.%E.as.Destroy.impl.Op.type (%E.as.Destroy.impl.Op.type) = fn_decl @E.as.Destroy.impl.Op [symbolic = @E.as.Destroy.impl.%E.as.Destroy.impl.Op (constants.%E.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @E.as.Destroy.impl.Op.%pattern_type (%pattern_type.72c) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @E.as.Destroy.impl.Op.%pattern_type (%pattern_type.72c) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9_16.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @E.as.Destroy.impl.Op.%ptr (%ptr.4e0) = value_param call_param0 -// CHECK:STDOUT: %.loc9_16.2: type = splice_block %Self.ref [symbolic = %E (constants.%E)] { -// CHECK:STDOUT: %.loc9_16.3: type = specific_constant constants.%E, @E(constants.%F) [symbolic = %E (constants.%E)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc9_16.3 [symbolic = %E (constants.%E)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @E.as.Destroy.impl.Op.%ptr (%ptr.4e0) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %E.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @E.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @D { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -892,10 +577,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: %D.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.501 [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -911,10 +592,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [symbolic = @E.as.Destroy.impl.%E (constants.%E)] -// CHECK:STDOUT: impl_decl @E.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@E.as.Destroy.impl.%E.as.Destroy.impl.Op.decl), @E.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @E.as.Destroy.impl(constants.%F) [symbolic = @E.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.520)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -923,19 +600,6 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @E.as.Destroy.impl.Op(@E.%F.loc9_9.2: %D) { -// CHECK:STDOUT: %F: %D = bind_symbolic_name F, 0 [symbolic = %F (constants.%F)] -// CHECK:STDOUT: %E: type = class_type @E, @E(%F) [symbolic = %E (constants.%E)] -// CHECK:STDOUT: %ptr: type = ptr_type %E [symbolic = %ptr (constants.%ptr.4e0)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.72c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @E.as.Destroy.impl.Op.%ptr (%ptr.4e0)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc25_31: %empty_struct_type = struct_literal () @@ -973,16 +637,3 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %F.loc9_9.1 => constants.%F // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @E.as.Destroy.impl(constants.%F) { -// CHECK:STDOUT: %F => constants.%F -// CHECK:STDOUT: %E => constants.%E -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.520 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @E.as.Destroy.impl.Op(constants.%F) { -// CHECK:STDOUT: %F => constants.%F -// CHECK:STDOUT: %E => constants.%E -// CHECK:STDOUT: %ptr => constants.%ptr.4e0 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.72c -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic_method.carbon b/toolchain/check/testdata/class/generic_method.carbon index ffc9e37f220b..350a039dde37 100644 --- a/toolchain/check/testdata/class/generic_method.carbon +++ b/toolchain/check/testdata/class/generic_method.carbon @@ -35,13 +35,6 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.955: type = ptr_type %Class [symbolic] -// CHECK:STDOUT: %pattern_type.9e0: type = pattern_type %ptr.955 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T} [symbolic] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [symbolic] // CHECK:STDOUT: %require_complete.4f8: = require_complete_type %Class [symbolic] @@ -49,11 +42,9 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -88,35 +79,6 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%T.loc15_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%T) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = value_param call_param0 -// CHECK:STDOUT: %.loc15_23.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc15_23.3: type = specific_constant constants.%Class, @Class(constants.%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc15_23.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc15_13.2: type) { // CHECK:STDOUT: %T.loc15_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_13.1 (constants.%T)] // CHECK:STDOUT: @@ -148,10 +110,6 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: %T.ref.loc17: type = name_ref T, @Class.%T.loc15_13.2 [symbolic = %T.loc17 (constants.%T)] // CHECK:STDOUT: %n.loc17: @Class.F.%T.loc17 (%T) = bind_name n, %n.param.loc17 // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%T) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type.loc18_1.1: = complete_type_witness constants.%struct_type.a [symbolic = %complete_type.loc18_1.2 (constants.%complete_type)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc18_1.1 // CHECK:STDOUT: @@ -179,17 +137,6 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%T.loc15_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.955)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.9e0)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%T) { // CHECK:STDOUT: %T.loc15_13.1 => constants.%T // CHECK:STDOUT: @@ -210,16 +157,3 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: %pattern_type.loc17_20 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.955 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9e0 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/import.carbon b/toolchain/check/testdata/class/import.carbon index 2b7f58a934b4..6014f667d28c 100644 --- a/toolchain/check/testdata/class/import.carbon +++ b/toolchain/check/testdata/class/import.carbon @@ -57,13 +57,6 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Empty: type = class_type @Empty [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.228: = impl_witness @Empty.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.961: type = ptr_type %Empty [concrete] -// CHECK:STDOUT: %pattern_type.00f: type = pattern_type %ptr.961 [concrete] -// CHECK:STDOUT: %Empty.as.Destroy.impl.Op.type: type = fn_type @Empty.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Empty.as.Destroy.impl.Op: %Empty.as.Destroy.impl.Op.type = 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: %Field: type = class_type @Field [concrete] @@ -72,35 +65,26 @@ fn Run() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Field.elem: type = unbound_element_type %Field, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.9b2: = impl_witness @Field.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d8b: type = ptr_type %Field [concrete] -// CHECK:STDOUT: %pattern_type.8bd: type = pattern_type %ptr.d8b [concrete] -// CHECK:STDOUT: %Field.as.Destroy.impl.Op.type: type = fn_type @Field.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Field.as.Destroy.impl.Op: %Field.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %ForwardDeclared: type = class_type @ForwardDeclared [concrete] // CHECK:STDOUT: %pattern_type.1b8: type = pattern_type %ForwardDeclared [concrete] // CHECK:STDOUT: %ForwardDeclared.F.type: type = fn_type @ForwardDeclared.F [concrete] // CHECK:STDOUT: %ForwardDeclared.F: %ForwardDeclared.F.type = struct_value () [concrete] -// CHECK:STDOUT: %ptr.6cf: type = ptr_type %ForwardDeclared [concrete] -// CHECK:STDOUT: %pattern_type.ebb: type = pattern_type %ptr.6cf [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %ForwardDeclared [concrete] +// CHECK:STDOUT: %pattern_type.ebb: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %ForwardDeclared.G.type: type = fn_type @ForwardDeclared.G [concrete] // CHECK:STDOUT: %ForwardDeclared.G: %ForwardDeclared.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.00c: = impl_witness @ForwardDeclared.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ForwardDeclared.as.Destroy.impl.Op.type: type = fn_type @ForwardDeclared.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ForwardDeclared.as.Destroy.impl.Op: %ForwardDeclared.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Incomplete: type = class_type @Incomplete [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -120,59 +104,7 @@ fn Run() { // CHECK:STDOUT: %Incomplete.decl: type = class_decl @Incomplete [concrete = constants.%Incomplete] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Empty.as.Destroy.impl: @Empty.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Empty.as.Destroy.impl.Op.decl: %Empty.as.Destroy.impl.Op.type = fn_decl @Empty.as.Destroy.impl.Op [concrete = constants.%Empty.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.00f = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.00f = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.961 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Empty [concrete = constants.%Empty] -// CHECK:STDOUT: %self: %ptr.961 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Empty.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Empty.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Field.as.Destroy.impl: @Field.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Field.as.Destroy.impl.Op.decl: %Field.as.Destroy.impl.Op.type = fn_decl @Field.as.Destroy.impl.Op [concrete = constants.%Field.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.8bd = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.8bd = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d8b = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Field [concrete = constants.%Field] -// CHECK:STDOUT: %self: %ptr.d8b = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Field.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Field.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @ForwardDeclared.as.Destroy.impl: @ForwardDeclared.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %ForwardDeclared.as.Destroy.impl.Op.decl: %ForwardDeclared.as.Destroy.impl.Op.type = fn_decl @ForwardDeclared.as.Destroy.impl.Op [concrete = constants.%ForwardDeclared.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.ebb = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.ebb = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6cf = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ForwardDeclared [concrete = constants.%ForwardDeclared] -// CHECK:STDOUT: %self: %ptr.6cf = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %ForwardDeclared.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @ForwardDeclared.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Empty { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Empty [concrete = constants.%Empty] -// CHECK:STDOUT: impl_decl @Empty.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Empty.as.Destroy.impl.%Empty.as.Destroy.impl.Op.decl), @Empty.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.228] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -184,10 +116,6 @@ fn Run() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc8: %Field.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Field [concrete = constants.%Field] -// CHECK:STDOUT: impl_decl @Field.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Field.as.Destroy.impl.%Field.as.Destroy.impl.Op.decl), @Field.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.9b2] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -210,17 +138,13 @@ fn Run() { // CHECK:STDOUT: %self.param_patt: %pattern_type.ebb = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: %.loc15_8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6cf = value_param call_param0 -// CHECK:STDOUT: %.loc15_23: type = splice_block %ptr [concrete = constants.%ptr.6cf] { +// CHECK:STDOUT: %self.param: %ptr = value_param call_param0 +// CHECK:STDOUT: %.loc15_23: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ForwardDeclared [concrete = constants.%ForwardDeclared] -// CHECK:STDOUT: %ptr: type = ptr_type %Self.ref [concrete = constants.%ptr.6cf] +// CHECK:STDOUT: %ptr: type = ptr_type %Self.ref [concrete = constants.%ptr] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: %ptr.6cf = bind_name self, %self.param +// CHECK:STDOUT: %self: %ptr = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ForwardDeclared [concrete = constants.%ForwardDeclared] -// CHECK:STDOUT: impl_decl @ForwardDeclared.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@ForwardDeclared.as.Destroy.impl.%ForwardDeclared.as.Destroy.impl.Op.decl), @ForwardDeclared.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.00c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -232,15 +156,9 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: class @Incomplete; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Empty.as.Destroy.impl.Op(%self.param: %ptr.961) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Field.as.Destroy.impl.Op(%self.param: %ptr.d8b) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ForwardDeclared.F(%self.param: %ForwardDeclared); // CHECK:STDOUT: -// CHECK:STDOUT: fn @ForwardDeclared.G(%self.param: %ptr.6cf); -// CHECK:STDOUT: -// CHECK:STDOUT: fn @ForwardDeclared.as.Destroy.impl.Op(%self.param: %ptr.6cf) = "no_op"; +// CHECK:STDOUT: fn @ForwardDeclared.G(%self.param: %ptr); // CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon // CHECK:STDOUT: @@ -307,6 +225,7 @@ fn Run() { // CHECK:STDOUT: %ptr.c62: type = ptr_type %Incomplete [concrete] // CHECK:STDOUT: %pattern_type.275: type = pattern_type %ptr.c62 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.type.6a8: type = fn_type @ptr.as.Destroy.impl.Op, @ptr.as.Destroy.impl(%Incomplete) [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.1a6: %ptr.as.Destroy.impl.Op.type.6a8 = struct_value () [concrete] // CHECK:STDOUT: %ptr.c22: type = ptr_type %ptr.c62 [concrete] @@ -315,17 +234,20 @@ fn Run() { // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.368: %ptr.as.Destroy.impl.Op.type.501 = struct_value () [concrete] // CHECK:STDOUT: %ptr.df0: type = ptr_type %ptr.6cf [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.specific_fn.0de: = specific_function %ptr.as.Destroy.impl.Op.368, @ptr.as.Destroy.impl.Op(%ForwardDeclared.7b34f2.1) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.146: = impl_witness imports.%Destroy.impl_witness_table.70a [concrete] -// CHECK:STDOUT: %ForwardDeclared.as.Destroy.impl.Op.type: type = fn_type @ForwardDeclared.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ForwardDeclared.as.Destroy.impl.Op: %ForwardDeclared.as.Destroy.impl.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.da3: = impl_witness imports.%Destroy.impl_witness_table.c37 [concrete] -// CHECK:STDOUT: %Field.as.Destroy.impl.Op.type: type = fn_type @Field.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Field.as.Destroy.impl.Op: %Field.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.c58: %type_where = facet_value %ForwardDeclared.7b34f2.1, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.870: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.c58) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.189: %AggregateT.as_type.as.Destroy.impl.Op.type.870 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.839: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.189, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.c58) [concrete] +// CHECK:STDOUT: %facet_value.f6b: %type_where = facet_value %Field, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.f21: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.f6b) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.f20: %AggregateT.as_type.as.Destroy.impl.Op.type.f21 = struct_value () [concrete] // CHECK:STDOUT: %ptr.d8b: type = ptr_type %Field [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c42: = impl_witness imports.%Destroy.impl_witness_table.0bf [concrete] -// CHECK:STDOUT: %Empty.as.Destroy.impl.Op.type: type = fn_type @Empty.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Empty.as.Destroy.impl.Op: %Empty.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.64a: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.f20, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.f6b) [concrete] +// CHECK:STDOUT: %facet_value.8d3: %type_where = facet_value %Empty, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.e4e: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.8d3) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.6e7: %AggregateT.as_type.as.Destroy.impl.Op.type.e4e = struct_value () [concrete] // CHECK:STDOUT: %ptr.961: type = ptr_type %Empty [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1a4: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.6e7, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.8d3) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -343,39 +265,24 @@ fn Run() { // CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//a, loc5_1, loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %Main.import_ref.fd7 = import_ref Main//a, inst18 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.709: = import_ref Main//a, loc9_1, loaded [concrete = constants.%complete_type.c07] -// CHECK:STDOUT: %Main.import_ref.845 = import_ref Main//a, inst63 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.845 = import_ref Main//a, inst23 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.4d2: %Field.elem = import_ref Main//a, loc8_8, loaded [concrete = %.d33] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.657: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.893) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.411)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.e48 = impl_witness_table (%Core.import_ref.657), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %.d33: %Field.elem = field_decl x, element0 [concrete] // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//a, loc16_1, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Main.import_ref.39e731.1 = import_ref Main//a, inst113 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.39e731.1 = import_ref Main//a, inst57 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.760: %ForwardDeclared.F.type = import_ref Main//a, loc14_21, loaded [concrete = constants.%ForwardDeclared.F] // CHECK:STDOUT: %Main.import_ref.26e: %ForwardDeclared.G.type = import_ref Main//a, loc15_27, loaded [concrete = constants.%ForwardDeclared.G] // CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//a, loc16_1, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Main.import_ref.39e731.2 = import_ref Main//a, inst113 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.39e731.2 = import_ref Main//a, inst57 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.42a = import_ref Main//a, loc14_21, unloaded // CHECK:STDOUT: %Main.import_ref.67a = import_ref Main//a, loc15_27, unloaded // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.0e4: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.31f) = import_ref Core//prelude/parts/copy, loc36_31, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.8a8)] // CHECK:STDOUT: %Copy.impl_witness_table.53c = impl_witness_table (%Core.import_ref.0e4), @ptr.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.762: = import_ref Main//a, loc4_13, loaded [concrete = constants.%Destroy.impl_witness.c42] -// CHECK:STDOUT: %Main.import_ref.75f: type = import_ref Main//a, loc4_13, loaded [concrete = constants.%Empty] -// CHECK:STDOUT: %Main.import_ref.e45cb5.1: type = import_ref Main//a, inst21 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.268: = import_ref Main//a, loc7_13, loaded [concrete = constants.%Destroy.impl_witness.da3] -// CHECK:STDOUT: %Main.import_ref.6de: type = import_ref Main//a, loc7_13, loaded [concrete = constants.%Field] -// CHECK:STDOUT: %Main.import_ref.e45cb5.2: type = import_ref Main//a, inst21 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.323: = import_ref Main//a, loc13_23, loaded [concrete = constants.%Destroy.impl_witness.146] -// CHECK:STDOUT: %Main.import_ref.805: type = import_ref Main//a, loc13_23, loaded [concrete = constants.%ForwardDeclared.7b34f2.1] -// CHECK:STDOUT: %Main.import_ref.e45cb5.3: type = import_ref Main//a, inst21 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.8fe: %ForwardDeclared.as.Destroy.impl.Op.type = import_ref Main//a, loc13_23, loaded [concrete = constants.%ForwardDeclared.as.Destroy.impl.Op] -// CHECK:STDOUT: %Destroy.impl_witness_table.70a = impl_witness_table (%Main.import_ref.8fe), @ForwardDeclared.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Main.import_ref.439: %Field.as.Destroy.impl.Op.type = import_ref Main//a, loc7_13, loaded [concrete = constants.%Field.as.Destroy.impl.Op] -// CHECK:STDOUT: %Destroy.impl_witness_table.c37 = impl_witness_table (%Main.import_ref.439), @Field.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Main.import_ref.90a: %Empty.as.Destroy.impl.Op.type = import_ref Main//a, loc4_13, loaded [concrete = constants.%Empty.as.Destroy.impl.Op] -// CHECK:STDOUT: %Destroy.impl_witness_table.0bf = impl_witness_table (%Main.import_ref.90a), @Empty.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -392,21 +299,6 @@ fn Run() { // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Empty.as.Destroy.impl: imports.%Main.import_ref.75f as imports.%Main.import_ref.e45cb5.1 [from "a.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.762 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Field.as.Destroy.impl: imports.%Main.import_ref.6de as imports.%Main.import_ref.e45cb5.2 [from "a.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.268 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @ForwardDeclared.as.Destroy.impl: imports.%Main.import_ref.805 as imports.%Main.import_ref.e45cb5.3 [from "a.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.323 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Empty [from "a.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.1 // CHECK:STDOUT: @@ -451,8 +343,8 @@ fn Run() { // CHECK:STDOUT: %a.var: ref %Empty = var %a.var_patt // CHECK:STDOUT: %.loc7_19.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc7_19.2: init %Empty = class_init (), %a.var [concrete = constants.%Empty.val] -// CHECK:STDOUT: %.loc7_3: init %Empty = converted %.loc7_19.1, %.loc7_19.2 [concrete = constants.%Empty.val] -// CHECK:STDOUT: assign %a.var, %.loc7_3 +// CHECK:STDOUT: %.loc7_3.1: init %Empty = converted %.loc7_19.1, %.loc7_19.2 [concrete = constants.%Empty.val] +// CHECK:STDOUT: assign %a.var, %.loc7_3.1 // CHECK:STDOUT: %Empty.ref: type = name_ref Empty, imports.%Main.Empty [concrete = constants.%Empty] // CHECK:STDOUT: %a: ref %Empty = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { @@ -471,8 +363,8 @@ fn Run() { // CHECK:STDOUT: %.loc9_25.3: ref %i32 = class_element_access %b.var, element0 // CHECK:STDOUT: %.loc9_25.4: init %i32 = initialize_from %.loc9_25.2 to %.loc9_25.3 [concrete = constants.%int_1.47b] // CHECK:STDOUT: %.loc9_25.5: init %Field = class_init (%.loc9_25.4), %b.var [concrete = constants.%Field.val] -// CHECK:STDOUT: %.loc9_3: init %Field = converted %.loc9_25.1, %.loc9_25.5 [concrete = constants.%Field.val] -// CHECK:STDOUT: assign %b.var, %.loc9_3 +// CHECK:STDOUT: %.loc9_3.1: init %Field = converted %.loc9_25.1, %.loc9_25.5 [concrete = constants.%Field.val] +// CHECK:STDOUT: assign %b.var, %.loc9_3.1 // CHECK:STDOUT: %Field.ref: type = name_ref Field, imports.%Main.Field [concrete = constants.%Field] // CHECK:STDOUT: %b: ref %Field = bind_name b, %b.var // CHECK:STDOUT: %b.ref: ref %Field = name_ref b, %b @@ -493,8 +385,8 @@ fn Run() { // CHECK:STDOUT: %c.var: ref %ForwardDeclared.7b34f2.1 = var %c.var_patt // CHECK:STDOUT: %.loc12_29.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc12_29.2: init %ForwardDeclared.7b34f2.1 = class_init (), %c.var [concrete = constants.%ForwardDeclared.val] -// CHECK:STDOUT: %.loc12_3: init %ForwardDeclared.7b34f2.1 = converted %.loc12_29.1, %.loc12_29.2 [concrete = constants.%ForwardDeclared.val] -// CHECK:STDOUT: assign %c.var, %.loc12_3 +// CHECK:STDOUT: %.loc12_3.1: init %ForwardDeclared.7b34f2.1 = converted %.loc12_29.1, %.loc12_29.2 [concrete = constants.%ForwardDeclared.val] +// CHECK:STDOUT: assign %c.var, %.loc12_3.1 // CHECK:STDOUT: %ForwardDeclared.ref.loc12: type = name_ref ForwardDeclared, imports.%Main.ForwardDeclared [concrete = constants.%ForwardDeclared.7b34f2.1] // CHECK:STDOUT: %c: ref %ForwardDeclared.7b34f2.1 = bind_name c, %c.var // CHECK:STDOUT: %c.ref.loc13: ref %ForwardDeclared.7b34f2.1 = name_ref c, %c @@ -545,15 +437,27 @@ fn Run() { // CHECK:STDOUT: %bound_method.loc16_3: = bound_method %d.var, %ptr.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc16_3: %ptr.df0 = addr_of %d.var // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.call.loc16: init %empty_tuple.type = call %bound_method.loc16_3(%addr.loc16_3) -// CHECK:STDOUT: %ForwardDeclared.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%ForwardDeclared.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc12: %type_where = facet_value constants.%ForwardDeclared.7b34f2.1, () [concrete = constants.%facet_value.c58] +// CHECK:STDOUT: %.loc12_3.2: %type_where = converted constants.%ForwardDeclared.7b34f2.1, %facet_value.loc12 [concrete = constants.%facet_value.c58] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc12: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.189 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.189, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.c58) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.839] +// CHECK:STDOUT: %bound_method.loc12: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc12: %ptr.6cf = addr_of %c.var -// CHECK:STDOUT: %ForwardDeclared.as.Destroy.impl.Op.call: init %empty_tuple.type = call %ForwardDeclared.as.Destroy.impl.Op.bound(%addr.loc12) -// CHECK:STDOUT: %Field.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%Field.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc12: init %empty_tuple.type = call %bound_method.loc12(%addr.loc12) +// CHECK:STDOUT: %facet_value.loc9: %type_where = facet_value constants.%Field, () [concrete = constants.%facet_value.f6b] +// CHECK:STDOUT: %.loc9_3.2: %type_where = converted constants.%Field, %facet_value.loc9 [concrete = constants.%facet_value.f6b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc9: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.f20 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.f20, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.f6b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.64a] +// CHECK:STDOUT: %bound_method.loc9_3: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc9: %ptr.d8b = addr_of %b.var -// CHECK:STDOUT: %Field.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Field.as.Destroy.impl.Op.bound(%addr.loc9) -// CHECK:STDOUT: %Empty.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%Empty.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc9: init %empty_tuple.type = call %bound_method.loc9_3(%addr.loc9) +// CHECK:STDOUT: %facet_value.loc7: %type_where = facet_value constants.%Empty, () [concrete = constants.%facet_value.8d3] +// CHECK:STDOUT: %.loc7_3.2: %type_where = converted constants.%Empty, %facet_value.loc7 [concrete = constants.%facet_value.8d3] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.6e7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.6e7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.8d3) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1a4] +// CHECK:STDOUT: %bound_method.loc7: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc7: %ptr.961 = addr_of %a.var -// CHECK:STDOUT: %Empty.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Empty.as.Destroy.impl.Op.bound(%addr.loc7) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7: init %empty_tuple.type = call %bound_method.loc7(%addr.loc7) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -561,9 +465,3 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: fn @ForwardDeclared.G [from "a.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: fn @ForwardDeclared.as.Destroy.impl.Op = "no_op" [from "a.carbon"]; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Field.as.Destroy.impl.Op = "no_op" [from "a.carbon"]; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Empty.as.Destroy.impl.Op = "no_op" [from "a.carbon"]; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/import_base.carbon b/toolchain/check/testdata/class/import_base.carbon index e6c331cdd52b..295b8a3e4978 100644 --- a/toolchain/check/testdata/class/import_base.carbon +++ b/toolchain/check/testdata/class/import_base.carbon @@ -54,22 +54,10 @@ fn Run() { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.x.unused: type = struct_type {.x: %i32, .unused: %i32} [concrete] // CHECK:STDOUT: %complete_type.20c: = complete_type_witness %struct_type.x.unused [concrete] // CHECK:STDOUT: %Child: type = class_type @Child [concrete] // CHECK:STDOUT: %Child.elem: type = unbound_element_type %Child, %Base [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.8d8: = impl_witness @Child.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.dc0: type = ptr_type %Child [concrete] -// CHECK:STDOUT: %pattern_type.b70: type = pattern_type %ptr.dc0 [concrete] -// CHECK:STDOUT: %Child.as.Destroy.impl.Op.type: type = fn_type @Child.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Child.as.Destroy.impl.Op: %Child.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base [concrete] // CHECK:STDOUT: } @@ -77,12 +65,10 @@ fn Run() { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -96,38 +82,6 @@ fn Run() { // CHECK:STDOUT: %Child.decl: type = class_decl @Child [concrete = constants.%Child] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Child.as.Destroy.impl: @Child.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Child.as.Destroy.impl.Op.decl: %Child.as.Destroy.impl.Op.type = fn_decl @Child.as.Destroy.impl.Op [concrete = constants.%Child.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.b70 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.b70 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.dc0 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Child [concrete = constants.%Child] -// CHECK:STDOUT: %self: %ptr.dc0 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Child.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Child.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.bcc = binding_pattern self [concrete] @@ -151,10 +105,6 @@ fn Run() { // CHECK:STDOUT: %int_32.loc9: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc9: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc9: %Base.elem = field_decl unused, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x.unused [concrete = constants.%complete_type.20c] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -169,10 +119,6 @@ fn Run() { // CHECK:STDOUT: class @Child { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc13: %Child.elem = base_decl %Base.ref, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Child [concrete = constants.%Child] -// CHECK:STDOUT: impl_decl @Child.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Child.as.Destroy.impl.%Child.as.Destroy.impl.Op.decl), @Child.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.8d8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base [concrete = constants.%complete_type.15c] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -187,10 +133,6 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Base.Unused(%self.param: %Base); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Child.as.Destroy.impl.Op(%self.param: %ptr.dc0) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -239,10 +181,12 @@ fn Run() { // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F [concrete] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.2d1: = impl_witness imports.%Destroy.impl_witness_table.cb5 [concrete] -// CHECK:STDOUT: %Child.as.Destroy.impl.Op.type: type = fn_type @Child.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Child.as.Destroy.impl.Op: %Child.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Child, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.2ac: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.db4: %AggregateT.as_type.as.Destroy.impl.Op.type.2ac = struct_value () [concrete] // CHECK:STDOUT: %ptr.dc0: type = ptr_type %Child [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.db4, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -261,7 +205,7 @@ fn Run() { // CHECK:STDOUT: %Main.import_ref.e67: %Base.elem = import_ref Main//a, loc8_8, loaded [concrete = %.720] // CHECK:STDOUT: %Main.import_ref.2e4 = import_ref Main//a, loc9_13, unloaded // CHECK:STDOUT: %Main.import_ref.c5f: = import_ref Main//a, loc14_1, loaded [concrete = constants.%complete_type.15c] -// CHECK:STDOUT: %Main.import_ref.9a9 = import_ref Main//a, inst111 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.9a9 = import_ref Main//a, inst72 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.7e5 = import_ref Main//a, loc13_20, unloaded // CHECK:STDOUT: %Main.import_ref.a21640.2: type = import_ref Main//a, loc13_16, loaded [concrete = constants.%Base] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] @@ -269,14 +213,6 @@ fn Run() { // CHECK:STDOUT: %ImplicitAs.impl_witness_table.e48 = impl_witness_table (%Core.import_ref.657), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %.720: %Base.elem = field_decl x, element0 [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.ff7 = import_ref Main//a, loc4_17, unloaded -// CHECK:STDOUT: %Main.import_ref.87c: type = import_ref Main//a, loc4_17, loaded [concrete = constants.%Base] -// CHECK:STDOUT: %Main.import_ref.e45cb5.1: type = import_ref Main//a, inst70 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.3e1: = import_ref Main//a, loc12_13, loaded [concrete = constants.%Destroy.impl_witness.2d1] -// CHECK:STDOUT: %Main.import_ref.98c: type = import_ref Main//a, loc12_13, loaded [concrete = constants.%Child] -// CHECK:STDOUT: %Main.import_ref.e45cb5.2: type = import_ref Main//a, inst70 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.8d2: %Child.as.Destroy.impl.Op.type = import_ref Main//a, loc12_13, loaded [concrete = constants.%Child.as.Destroy.impl.Op] -// CHECK:STDOUT: %Destroy.impl_witness_table.cb5 = impl_witness_table (%Main.import_ref.8d2), @Child.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -291,16 +227,6 @@ fn Run() { // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: imports.%Main.import_ref.87c as imports.%Main.import_ref.e45cb5.1 [from "a.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.ff7 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Child.as.Destroy.impl: imports.%Main.import_ref.98c as imports.%Main.import_ref.e45cb5.2 [from "a.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.3e1 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Child [from "a.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.c5f // CHECK:STDOUT: @@ -354,8 +280,8 @@ fn Run() { // CHECK:STDOUT: %.loc7_47.8: init %Base = class_init (%.loc7_47.4, %.loc7_47.7), %.loc7_48.2 [concrete = constants.%Base.val] // CHECK:STDOUT: %.loc7_48.3: init %Base = converted %.loc7_47.1, %.loc7_47.8 [concrete = constants.%Base.val] // CHECK:STDOUT: %.loc7_48.4: init %Child = class_init (%.loc7_48.3), %a.var [concrete = constants.%Child.val] -// CHECK:STDOUT: %.loc7_3: init %Child = converted %.loc7_48.1, %.loc7_48.4 [concrete = constants.%Child.val] -// CHECK:STDOUT: assign %a.var, %.loc7_3 +// CHECK:STDOUT: %.loc7_3.1: init %Child = converted %.loc7_48.1, %.loc7_48.4 [concrete = constants.%Child.val] +// CHECK:STDOUT: assign %a.var, %.loc7_3.1 // CHECK:STDOUT: %Child.ref: type = name_ref Child, imports.%Main.Child [concrete = constants.%Child] // CHECK:STDOUT: %a: ref %Child = bind_name a, %a.var // CHECK:STDOUT: %a.ref.loc8: ref %Child = name_ref a, %a @@ -378,13 +304,15 @@ fn Run() { // CHECK:STDOUT: %.loc9_3.2: ref %Base = converted %a.ref.loc9, %.loc9_3.1 // CHECK:STDOUT: %.loc9_3.3: %Base = bind_value %.loc9_3.2 // CHECK:STDOUT: %Base.F.call: init %empty_tuple.type = call %Base.F.bound(%.loc9_3.3) -// CHECK:STDOUT: %Child.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%Child.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Child, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc7_3.2: %type_where = converted constants.%Child, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.db4 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.db4, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc7_3: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.dc0 = addr_of %a.var -// CHECK:STDOUT: %Child.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Child.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc7_3(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Base.F [from "a.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Child.as.Destroy.impl.Op = "no_op" [from "a.carbon"]; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/import_forward_decl.carbon b/toolchain/check/testdata/class/import_forward_decl.carbon index 8d7ff490077f..34677b6a0f24 100644 --- a/toolchain/check/testdata/class/import_forward_decl.carbon +++ b/toolchain/check/testdata/class/import_forward_decl.carbon @@ -53,24 +53,15 @@ class ForwardDecl { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %ForwardDecl: type = class_type @ForwardDecl [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @ForwardDecl.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.83c: type = ptr_type %ForwardDecl [concrete] -// CHECK:STDOUT: %pattern_type.fd7: type = pattern_type %ptr.83c [concrete] -// CHECK:STDOUT: %ForwardDecl.as.Destroy.impl.Op.type: type = fn_type @ForwardDecl.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ForwardDecl.as.Destroy.impl.Op: %ForwardDecl.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -84,27 +75,7 @@ class ForwardDecl { // CHECK:STDOUT: %ForwardDecl.decl: type = class_decl @ForwardDecl [concrete = constants.%ForwardDecl] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @ForwardDecl.as.Destroy.impl: @ForwardDecl.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %ForwardDecl.as.Destroy.impl.Op.decl: %ForwardDecl.as.Destroy.impl.Op.type = fn_decl @ForwardDecl.as.Destroy.impl.Op [concrete = constants.%ForwardDecl.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.fd7 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.fd7 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.83c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ForwardDecl [concrete = constants.%ForwardDecl] -// CHECK:STDOUT: %self: %ptr.83c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %ForwardDecl.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @ForwardDecl.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @ForwardDecl { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ForwardDecl [concrete = constants.%ForwardDecl] -// CHECK:STDOUT: impl_decl @ForwardDecl.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@ForwardDecl.as.Destroy.impl.%ForwardDecl.as.Destroy.impl.Op.decl), @ForwardDecl.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -112,5 +83,3 @@ class ForwardDecl { // CHECK:STDOUT: .Self = constants.%ForwardDecl // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @ForwardDecl.as.Destroy.impl.Op(%self.param: %ptr.83c) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/import_indirect.carbon b/toolchain/check/testdata/class/import_indirect.carbon index 57292da599d5..2fdc8627f829 100644 --- a/toolchain/check/testdata/class/import_indirect.carbon +++ b/toolchain/check/testdata/class/import_indirect.carbon @@ -108,24 +108,15 @@ var ptr: E* = &val; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -137,27 +128,7 @@ var ptr: E* = &val; // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -165,8 +136,6 @@ var ptr: E* = &val; // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/class/import_member_cycle.carbon b/toolchain/check/testdata/class/import_member_cycle.carbon index 91bbed21e315..2887300417c1 100644 --- a/toolchain/check/testdata/class/import_member_cycle.carbon +++ b/toolchain/check/testdata/class/import_member_cycle.carbon @@ -34,25 +34,17 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Cycle: type = class_type @Cycle [concrete] -// CHECK:STDOUT: %ptr.257: type = ptr_type %Cycle [concrete] -// CHECK:STDOUT: %Cycle.elem: type = unbound_element_type %Cycle, %ptr.257 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Cycle.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %pattern_type.d3d: type = pattern_type %ptr.257 [concrete] -// CHECK:STDOUT: %Cycle.as.Destroy.impl.Op.type: type = fn_type @Cycle.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Cycle.as.Destroy.impl.Op: %Cycle.as.Destroy.impl.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %ptr.257} [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %Cycle [concrete] +// CHECK:STDOUT: %Cycle.elem: type = unbound_element_type %Cycle, %ptr [concrete] +// CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %ptr} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -64,30 +56,10 @@ fn Run() { // CHECK:STDOUT: %Cycle.decl: type = class_decl @Cycle [concrete = constants.%Cycle] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Cycle.as.Destroy.impl: @Cycle.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Cycle.as.Destroy.impl.Op.decl: %Cycle.as.Destroy.impl.Op.type = fn_decl @Cycle.as.Destroy.impl.Op [concrete = constants.%Cycle.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.d3d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.d3d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.257 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Cycle [concrete = constants.%Cycle] -// CHECK:STDOUT: %self: %ptr.257 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Cycle.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Cycle.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Cycle { // CHECK:STDOUT: %Cycle.ref: type = name_ref Cycle, file.%Cycle.decl [concrete = constants.%Cycle] -// CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr.257] +// CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr] // CHECK:STDOUT: %.loc5: %Cycle.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Cycle [concrete = constants.%Cycle] -// CHECK:STDOUT: impl_decl @Cycle.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Cycle.as.Destroy.impl.%Cycle.as.Destroy.impl.Op.decl), @Cycle.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -97,8 +69,6 @@ fn Run() { // CHECK:STDOUT: .a = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Cycle.as.Destroy.impl.Op(%self.param: %ptr.257) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -128,9 +98,6 @@ fn Run() { // CHECK:STDOUT: %Main.import_ref.3a6 = import_ref Main//a, inst18 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.4e0 = import_ref Main//a, loc5_8, unloaded // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.13a = import_ref Main//a, loc4_13, unloaded -// CHECK:STDOUT: %Main.import_ref.f64: type = import_ref Main//a, loc4_13, loaded [concrete = constants.%Cycle] -// CHECK:STDOUT: %Main.import_ref.e45: type = import_ref Main//a, inst26 [no loc], loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -144,11 +111,6 @@ fn Run() { // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Cycle.as.Destroy.impl: imports.%Main.import_ref.f64 as imports.%Main.import_ref.e45 [from "a.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.13a -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Cycle [from "a.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.72d // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/import_struct_cyle.carbon b/toolchain/check/testdata/class/import_struct_cyle.carbon index 2fa8fab850eb..e9974bc48363 100644 --- a/toolchain/check/testdata/class/import_struct_cyle.carbon +++ b/toolchain/check/testdata/class/import_struct_cyle.carbon @@ -39,27 +39,19 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Cycle: type = class_type @Cycle [concrete] -// CHECK:STDOUT: %ptr.257: type = ptr_type %Cycle [concrete] -// CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr.257} [concrete] -// CHECK:STDOUT: %pattern_type.afd: type = pattern_type %struct_type.b [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %Cycle [concrete] +// CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.b [concrete] // CHECK:STDOUT: %Cycle.elem: type = unbound_element_type %Cycle, %struct_type.b [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Cycle.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %pattern_type.d3d: type = pattern_type %ptr.257 [concrete] -// CHECK:STDOUT: %Cycle.as.Destroy.impl.Op.type: type = fn_type @Cycle.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Cycle.as.Destroy.impl.Op: %Cycle.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %struct_type.b} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -71,44 +63,24 @@ 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.afd = binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.afd = var_pattern %a.patt [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a [concrete] +// CHECK:STDOUT: %a.var_patt: %pattern_type = var_pattern %a.patt [concrete] // 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] { // CHECK:STDOUT: %Cycle.ref: type = name_ref Cycle, %Cycle.decl.loc4 [concrete = constants.%Cycle] -// CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr.257] -// CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr.257} [concrete = constants.%struct_type.b] +// CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr] +// CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr} [concrete = constants.%struct_type.b] // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %struct_type.b = bind_name a, %a.var [concrete = %a.var] // CHECK:STDOUT: %Cycle.decl.loc8: type = class_decl @Cycle [concrete = constants.%Cycle] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Cycle.as.Destroy.impl: @Cycle.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Cycle.as.Destroy.impl.Op.decl: %Cycle.as.Destroy.impl.Op.type = fn_decl @Cycle.as.Destroy.impl.Op [concrete = constants.%Cycle.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.d3d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.d3d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.257 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Cycle [concrete = constants.%Cycle] -// CHECK:STDOUT: %self: %ptr.257 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Cycle.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Cycle.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Cycle { // CHECK:STDOUT: %Cycle.ref: type = name_ref Cycle, file.%Cycle.decl.loc4 [concrete = constants.%Cycle] -// CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr.257] -// CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr.257} [concrete = constants.%struct_type.b] +// CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr] +// CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr} [concrete = constants.%struct_type.b] // CHECK:STDOUT: %.loc10: %Cycle.elem = field_decl c, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Cycle [concrete = constants.%Cycle] -// CHECK:STDOUT: impl_decl @Cycle.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Cycle.as.Destroy.impl.%Cycle.as.Destroy.impl.Op.decl), @Cycle.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.c [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -118,8 +90,6 @@ fn Run() { // CHECK:STDOUT: .c = %.loc10 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Cycle.as.Destroy.impl.Op(%self.param: %ptr.257) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/class/inheritance_access.carbon b/toolchain/check/testdata/class/inheritance_access.carbon index 8d3345ddada6..5928506afc3e 100644 --- a/toolchain/check/testdata/class/inheritance_access.carbon +++ b/toolchain/check/testdata/class/inheritance_access.carbon @@ -241,13 +241,6 @@ class B { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Shape.elem: type = unbound_element_type %Shape, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.87e: = impl_witness @Shape.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d62: type = ptr_type %Shape [concrete] -// CHECK:STDOUT: %pattern_type.77d: type = pattern_type %ptr.d62 [concrete] -// CHECK:STDOUT: %Shape.as.Destroy.impl.Op.type: type = fn_type @Shape.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Shape.as.Destroy.impl.Op: %Shape.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.x.y: type = struct_type {.x: %i32, .y: %i32} [concrete] // CHECK:STDOUT: %complete_type.70a: = complete_type_witness %struct_type.x.y [concrete] // CHECK:STDOUT: %Circle: type = class_type @Circle [concrete] @@ -258,11 +251,6 @@ class B { // CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %Circle.GetPosition.type: type = fn_type @Circle.GetPosition [concrete] // CHECK:STDOUT: %Circle.GetPosition: %Circle.GetPosition.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7a7: = impl_witness @Circle.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.54d: type = ptr_type %Circle [concrete] -// CHECK:STDOUT: %pattern_type.f32: type = pattern_type %ptr.54d [concrete] -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op.type: type = fn_type @Circle.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op: %Circle.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ed: type = struct_type {.base: %Shape} [concrete] // CHECK:STDOUT: %complete_type.a2b: = complete_type_witness %struct_type.base.0ed [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -280,13 +268,11 @@ class B { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -303,38 +289,6 @@ class B { // CHECK:STDOUT: %Circle.decl: type = class_decl @Circle [concrete = constants.%Circle] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Shape.as.Destroy.impl: @Shape.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Shape.as.Destroy.impl.Op.decl: %Shape.as.Destroy.impl.Op.type = fn_decl @Shape.as.Destroy.impl.Op [concrete = constants.%Shape.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.77d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.77d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d62 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Shape [concrete = constants.%Shape] -// CHECK:STDOUT: %self: %ptr.d62 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Shape.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Shape.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Circle.as.Destroy.impl: @Circle.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Circle.as.Destroy.impl.Op.decl: %Circle.as.Destroy.impl.Op.type = fn_decl @Circle.as.Destroy.impl.Op [concrete = constants.%Circle.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f32 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f32 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.54d = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle] -// CHECK:STDOUT: %self: %ptr.54d = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Circle.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Circle.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Shape { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -342,10 +296,6 @@ class B { // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: %Shape.elem = field_decl y, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Shape [concrete = constants.%Shape] -// CHECK:STDOUT: impl_decl @Shape.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Shape.as.Destroy.impl.%Shape.as.Destroy.impl.Op.decl), @Shape.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.87e] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x.y [concrete = constants.%complete_type.70a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -376,10 +326,6 @@ class B { // CHECK:STDOUT: %return.param: ref %tuple.type.d07 = out_param call_param1 // CHECK:STDOUT: %return: ref %tuple.type.d07 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle] -// CHECK:STDOUT: impl_decl @Circle.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Circle.as.Destroy.impl.%Circle.as.Destroy.impl.Op.decl), @Circle.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.7a7] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.0ed [concrete = constants.%complete_type.a2b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -393,8 +339,6 @@ class B { // CHECK:STDOUT: extend %Shape.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Shape.as.Destroy.impl.Op(%self.param: %ptr.d62) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Circle.GetPosition(%self.param: %Circle) -> %return.param: %tuple.type.d07 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref.loc13_13: %Circle = name_ref self, %self @@ -429,8 +373,6 @@ class B { // CHECK:STDOUT: return %.loc13_28 to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Circle.as.Destroy.impl.Op(%self.param: %ptr.54d) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- shadowing_access.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -438,13 +380,6 @@ class B { // 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] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: %B: type = class_type @B [concrete] @@ -456,11 +391,6 @@ class B { // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %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: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.953: type = struct_type {.base: %A} [concrete] // CHECK:STDOUT: %complete_type.020: = complete_type_witness %struct_type.base.953 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -469,23 +399,16 @@ class B { // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %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: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ff: type = struct_type {.base: %B} [concrete] // CHECK:STDOUT: %complete_type.98e: = complete_type_witness %struct_type.base.0ff [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -502,60 +425,8 @@ class B { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -576,10 +447,6 @@ class B { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.953 [concrete = constants.%complete_type.020] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -608,10 +475,6 @@ class B { // CHECK:STDOUT: %return.param: ref %empty_tuple.type = out_param call_param1 // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.0ff [concrete = constants.%complete_type.98e] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -626,12 +489,8 @@ class B { // CHECK:STDOUT: // CHECK:STDOUT: fn @A.F(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @B.F() -> %i32; // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.G(%self.param: %C) -> %empty_tuple.type { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %C = name_ref self, %self @@ -640,8 +499,6 @@ class B { // CHECK:STDOUT: return %A.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- inherited_member_access.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -671,13 +528,6 @@ class B { // CHECK:STDOUT: %int_5.0f6: %i32 = int_value 5 [concrete] // CHECK:STDOUT: %A.SomeProtectedFunction.type: type = fn_type @A.SomeProtectedFunction [concrete] // CHECK:STDOUT: %A.SomeProtectedFunction: %A.SomeProtectedFunction.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: %B: type = class_type @B [concrete] @@ -686,11 +536,6 @@ class B { // CHECK:STDOUT: %B.G: %B.G.type = struct_value () [concrete] // CHECK:STDOUT: %B.H.type: type = fn_type @B.H [concrete] // CHECK:STDOUT: %B.H: %B.H.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %A} [concrete] // CHECK:STDOUT: %complete_type.020: = complete_type_witness %struct_type.base [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -709,7 +554,6 @@ class B { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -718,7 +562,6 @@ class B { // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] -// 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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -735,38 +578,6 @@ class B { // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %SOME_CONSTANT.patt: %pattern_type.7ce = binding_pattern SOME_CONSTANT [concrete] @@ -793,10 +604,6 @@ class B { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -828,10 +635,6 @@ class B { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base [concrete = constants.%complete_type.020] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -856,8 +659,6 @@ class B { // CHECK:STDOUT: return %.loc7 to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @B.G() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -878,8 +679,6 @@ class B { // CHECK:STDOUT: return %A.SomeProtectedFunction.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_inherited_private_field_access.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -889,13 +688,6 @@ class B { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Shape.elem: type = unbound_element_type %Shape, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.87e: = impl_witness @Shape.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d62: type = ptr_type %Shape [concrete] -// CHECK:STDOUT: %pattern_type.77d: type = pattern_type %ptr.d62 [concrete] -// CHECK:STDOUT: %Shape.as.Destroy.impl.Op.type: type = fn_type @Shape.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Shape.as.Destroy.impl.Op: %Shape.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %i32} [concrete] // CHECK:STDOUT: %complete_type.0f9: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %Square: type = class_type @Square [concrete] @@ -904,11 +696,6 @@ class B { // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %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: %Destroy.impl_witness.b18: = impl_witness @Square.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.671: type = ptr_type %Square [concrete] -// CHECK:STDOUT: %pattern_type.dc2: type = pattern_type %ptr.671 [concrete] -// CHECK:STDOUT: %Square.as.Destroy.impl.Op.type: type = fn_type @Square.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Square.as.Destroy.impl.Op: %Square.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ed: type = struct_type {.base: %Shape} [concrete] // CHECK:STDOUT: %complete_type.a2b: = complete_type_witness %struct_type.base.0ed [concrete] // CHECK:STDOUT: } @@ -916,12 +703,10 @@ class B { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -935,46 +720,10 @@ class B { // CHECK:STDOUT: %Square.decl: type = class_decl @Square [concrete = constants.%Square] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Shape.as.Destroy.impl: @Shape.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Shape.as.Destroy.impl.Op.decl: %Shape.as.Destroy.impl.Op.type = fn_decl @Shape.as.Destroy.impl.Op [concrete = constants.%Shape.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.77d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.77d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d62 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Shape [concrete = constants.%Shape] -// CHECK:STDOUT: %self: %ptr.d62 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Shape.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Shape.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Square.as.Destroy.impl: @Square.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Square.as.Destroy.impl.Op.decl: %Square.as.Destroy.impl.Op.type = fn_decl @Square.as.Destroy.impl.Op [concrete = constants.%Square.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.dc2 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.dc2 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.671 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Square [concrete = constants.%Square] -// CHECK:STDOUT: %self: %ptr.671 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Square.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Square.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Shape { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: %Shape.elem = field_decl y, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Shape [concrete = constants.%Shape] -// CHECK:STDOUT: impl_decl @Shape.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Shape.as.Destroy.impl.%Shape.as.Destroy.impl.Op.decl), @Shape.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.87e] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.y [concrete = constants.%complete_type.0f9] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1000,10 +749,6 @@ class B { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param1 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Square [concrete = constants.%Square] -// CHECK:STDOUT: impl_decl @Square.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Square.as.Destroy.impl.%Square.as.Destroy.impl.Op.decl), @Square.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.b18] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.0ed [concrete = constants.%complete_type.a2b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1016,8 +761,6 @@ class B { // CHECK:STDOUT: extend %Shape.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Shape.as.Destroy.impl.Op(%self.param: %ptr.d62) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Square.GetPosition(%self.param: %Square) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %Square = name_ref self, %self @@ -1025,8 +768,6 @@ class B { // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Square.as.Destroy.impl.Op(%self.param: %ptr.671) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- noninstance_private_on_self.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1036,24 +777,15 @@ class B { // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] // CHECK:STDOUT: %C.G.type: type = fn_type @C.G [concrete] // CHECK:STDOUT: %C.G: %C.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1065,29 +797,9 @@ class B { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.G.decl: %C.G.type = fn_decl @C.G [concrete = constants.%C.G] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1110,8 +822,6 @@ class B { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- noninstance_protected_on_self.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1121,24 +831,15 @@ class B { // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] // CHECK:STDOUT: %C.G.type: type = fn_type @C.G [concrete] // CHECK:STDOUT: %C.G: %C.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1150,29 +851,9 @@ class B { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.G.decl: %C.G.type = fn_decl @C.G [concrete = constants.%C.G] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1195,43 +876,27 @@ class B { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_noninstance_private_on_parent.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F [concrete] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = 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: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %B [concrete] // CHECK:STDOUT: %C.G.type: type = fn_type @C.G [concrete] // CHECK:STDOUT: %C.G: %C.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ff: type = struct_type {.base: %B} [concrete] // CHECK:STDOUT: %complete_type.98e: = complete_type_witness %struct_type.base.0ff [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1245,44 +910,8 @@ class B { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @B { // CHECK:STDOUT: %B.F.decl: %B.F.type = fn_decl @B.F [concrete = constants.%B.F] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1295,10 +924,6 @@ class B { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc9: %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.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.0ff [concrete = constants.%complete_type.98e] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1316,8 +941,6 @@ class B { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -1325,8 +948,6 @@ class B { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- noninstance_protected_on_parent.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1334,35 +955,21 @@ class B { // CHECK:STDOUT: %B.F.type: type = fn_type @B.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = 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: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %B [concrete] // CHECK:STDOUT: %C.G.type: type = fn_type @C.G [concrete] // CHECK:STDOUT: %C.G: %C.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ff: type = struct_type {.base: %B} [concrete] // CHECK:STDOUT: %complete_type.98e: = complete_type_witness %struct_type.base.0ff [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1376,44 +983,8 @@ class B { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @B { // CHECK:STDOUT: %B.F.decl: %B.F.type = fn_decl @B.F [concrete = constants.%B.F] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1426,10 +997,6 @@ class B { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc9: %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.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.0ff [concrete = constants.%complete_type.98e] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1447,8 +1014,6 @@ class B { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -1457,8 +1022,6 @@ class B { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_non_inherited_access.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1485,21 +1048,9 @@ class B { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0, @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.0f6: %i32 = int_value 5 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: %Internal: type = class_type @Internal [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ac3: = impl_witness @Internal.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.84a: type = ptr_type %Internal [concrete] -// CHECK:STDOUT: %pattern_type.e1d: type = pattern_type %ptr.84a [concrete] -// CHECK:STDOUT: %Internal.as.Destroy.impl.Op.type: type = fn_type @Internal.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Internal.as.Destroy.impl.Op: %Internal.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %Internal [concrete] // CHECK:STDOUT: %B.G.type: type = fn_type @B.G [concrete] @@ -1507,11 +1058,6 @@ class B { // CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %B.SomeFunc.type: type = fn_type @B.SomeFunc [concrete] // CHECK:STDOUT: %B.SomeFunc: %B.SomeFunc.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.internal.6f5: type = struct_type {.internal: %Internal} [concrete] // CHECK:STDOUT: %complete_type.d77: = complete_type_witness %struct_type.internal.6f5 [concrete] // CHECK:STDOUT: } @@ -1520,7 +1066,6 @@ class B { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -1528,7 +1073,6 @@ class B { // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -1544,54 +1088,6 @@ class B { // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Internal.as.Destroy.impl: @Internal.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Internal.as.Destroy.impl.Op.decl: %Internal.as.Destroy.impl.Op.type = fn_decl @Internal.as.Destroy.impl.Op [concrete = constants.%Internal.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.e1d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.e1d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.84a = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Internal [concrete = constants.%Internal] -// CHECK:STDOUT: %self: %ptr.84a = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Internal.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Internal.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %SOME_PROTECTED_CONSTANT.patt: %pattern_type.7ce = binding_pattern SOME_PROTECTED_CONSTANT [concrete] @@ -1625,10 +1121,6 @@ class B { // CHECK:STDOUT: %.loc6_44.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc6 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %.loc6_44.2: %i32 = converted %int_5.loc6, %.loc6_44.1 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %SOME_PRIVATE_CONSTANT: %i32 = bind_name SOME_PRIVATE_CONSTANT, %.loc6_44.2 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1655,10 +1147,6 @@ class B { // CHECK:STDOUT: %.loc10_42.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %.loc10_42.2: %i32 = converted %int_5, %.loc10_42.1 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %INTERNAL_CONSTANT: %i32 = bind_name INTERNAL_CONSTANT, %.loc10_42.2 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Internal [concrete = constants.%Internal] -// CHECK:STDOUT: impl_decl @Internal.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Internal.as.Destroy.impl.%Internal.as.Destroy.impl.Op.decl), @Internal.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ac3] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1693,10 +1181,6 @@ class B { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param1 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.internal.6f5 [concrete = constants.%complete_type.d77] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1709,10 +1193,6 @@ class B { // CHECK:STDOUT: .A = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Internal.as.Destroy.impl.Op(%self.param: %ptr.84a) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @B.G() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %A.ref.loc24: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -1732,8 +1212,6 @@ class B { // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_compound_member_access.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1743,13 +1221,6 @@ class B { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] @@ -1757,11 +1228,6 @@ class B { // CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F [concrete] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.953: type = struct_type {.base: %A} [concrete] // CHECK:STDOUT: %complete_type.020: = complete_type_witness %struct_type.base.953 [concrete] // CHECK:STDOUT: } @@ -1769,12 +1235,10 @@ class B { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1788,46 +1252,10 @@ class B { // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1848,10 +1276,6 @@ class B { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] // CHECK:STDOUT: %self: %B = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.953 [concrete = constants.%complete_type.020] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1863,8 +1287,6 @@ class B { // CHECK:STDOUT: extend %A.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @B.F(%self.param: %B) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %B = name_ref self, %self @@ -1873,8 +1295,6 @@ class B { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- inherited_compound_member_access.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1884,13 +1304,6 @@ class B { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] @@ -1898,11 +1311,6 @@ class B { // CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %B.F.type: type = fn_type @B.F [concrete] // CHECK:STDOUT: %B.F: %B.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.953: type = struct_type {.base: %A} [concrete] // CHECK:STDOUT: %complete_type.020: = complete_type_witness %struct_type.base.953 [concrete] // CHECK:STDOUT: } @@ -1910,12 +1318,10 @@ class B { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1929,46 +1335,10 @@ class B { // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1989,10 +1359,6 @@ class B { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] // CHECK:STDOUT: %self: %B = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.953 [concrete = constants.%complete_type.020] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -2004,8 +1370,6 @@ class B { // CHECK:STDOUT: extend %A.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @B.F(%self.param: %B) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %B = name_ref self, %self @@ -2017,5 +1381,3 @@ class B { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/init.carbon b/toolchain/check/testdata/class/init.carbon index 293d556c5b20..1971e4a579d0 100644 --- a/toolchain/check/testdata/class/init.carbon +++ b/toolchain/check/testdata/class/init.carbon @@ -37,15 +37,10 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: %Class.elem.c91: type = unbound_element_type %Class, %i32 [concrete] // CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] // CHECK:STDOUT: %Class.elem.0c0: type = unbound_element_type %Class, %ptr.e71 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n.next: type = struct_type {.n: %i32, .next: %ptr.e71} [concrete] // CHECK:STDOUT: %complete_type.78f: = complete_type_witness %struct_type.n.next [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] // CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] @@ -76,13 +71,11 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -149,22 +142,6 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -172,10 +149,6 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %ptr: type = ptr_type %Class.ref [concrete = constants.%ptr.e71] // CHECK:STDOUT: %.loc17: %Class.elem.0c0 = field_decl next, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n.next [concrete = constants.%complete_type.78f] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -186,8 +159,6 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: .next = %.loc17 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Make(%n.param: %i32, %next.param: %ptr.e71) -> %return.param: %Class { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %n.ref: %i32 = name_ref n, %n diff --git a/toolchain/check/testdata/class/init_as.carbon b/toolchain/check/testdata/class/init_as.carbon index e7b7b3a766e6..a472a605a303 100644 --- a/toolchain/check/testdata/class/init_as.carbon +++ b/toolchain/check/testdata/class/init_as.carbon @@ -32,13 +32,6 @@ fn F() -> i32 { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.955: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] @@ -77,25 +70,32 @@ fn F() -> i32 { // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %i32, (%Copy.impl_witness.a32) [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Class, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.7c2: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -117,22 +117,6 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -140,10 +124,6 @@ fn F() -> i32 { // CHECK:STDOUT: %int_32.loc17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: %Class.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.955] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.501 [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -153,8 +133,6 @@ fn F() -> i32 { // CHECK:STDOUT: .b = %.loc17 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -189,9 +167,13 @@ fn F() -> i32 { // CHECK:STDOUT: %specific_fn.loc21_37: = specific_function %impl.elem0.loc21_37, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc21_37.2: = bound_method %.loc21_37.2, %specific_fn.loc21_37 // CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc21_37.2(%.loc21_37.2) -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %.loc21_26.10, constants.%Class.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Class, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc21_26.11: %type_where = converted constants.%Class, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc21_26.10, constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc21_26.5: = bound_method %.loc21_26.10, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.e71 = addr_of %.loc21_26.10 -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Class.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc21_26.5(%addr) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/init_nested.carbon b/toolchain/check/testdata/class/init_nested.carbon index 365c73396918..c81a6ce0919b 100644 --- a/toolchain/check/testdata/class/init_nested.carbon +++ b/toolchain/check/testdata/class/init_nested.carbon @@ -37,13 +37,6 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Inner.elem: type = unbound_element_type %Inner, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.796: = impl_witness @Inner.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.78b: type = ptr_type %Inner [concrete] -// CHECK:STDOUT: %pattern_type.6f5: type = pattern_type %ptr.78b [concrete] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: %Inner.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b [concrete] // CHECK:STDOUT: %pattern_type.a31: type = pattern_type %Inner [concrete] @@ -51,11 +44,6 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: %MakeInner: %MakeInner.type = struct_value () [concrete] // CHECK:STDOUT: %Outer: type = class_type @Outer [concrete] // CHECK:STDOUT: %Outer.elem: type = unbound_element_type %Outer, %Inner [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.34a: = impl_witness @Outer.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.5df: type = ptr_type %Outer [concrete] -// CHECK:STDOUT: %pattern_type.95c: type = pattern_type %ptr.5df [concrete] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.c.d.dce: type = struct_type {.c: %Inner, .d: %Inner} [concrete] // CHECK:STDOUT: %complete_type.8b6: = complete_type_witness %struct_type.c.d.dce [concrete] // CHECK:STDOUT: %pattern_type.e74: type = pattern_type %Outer [concrete] @@ -66,12 +54,10 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -103,38 +89,6 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Inner.as.Destroy.impl: @Inner.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.decl: %Inner.as.Destroy.impl.Op.type = fn_decl @Inner.as.Destroy.impl.Op [concrete = constants.%Inner.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.6f5 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.6f5 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.78b = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner [concrete = constants.%Inner] -// CHECK:STDOUT: %self: %ptr.78b = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Inner.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Inner.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Outer.as.Destroy.impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: %Outer.as.Destroy.impl.Op.type = fn_decl @Outer.as.Destroy.impl.Op [concrete = constants.%Outer.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.95c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.95c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc22: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.5df = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer [concrete = constants.%Outer] -// CHECK:STDOUT: %self: %ptr.5df = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Inner { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -142,10 +96,6 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: %int_32.loc17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: %Inner.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner [concrete = constants.%Inner] -// CHECK:STDOUT: impl_decl @Inner.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.decl), @Inner.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.796] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -160,10 +110,6 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: %.loc23: %Outer.elem = field_decl c, element0 [concrete] // CHECK:STDOUT: %Inner.ref.loc24: type = name_ref Inner, file.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %.loc24: %Outer.elem = field_decl d, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer [concrete = constants.%Outer] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.34a] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.c.d.dce [concrete = constants.%complete_type.8b6] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -174,12 +120,8 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: .d = %.loc24 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Inner.as.Destroy.impl.Op(%self.param: %ptr.78b) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @MakeInner() -> %return.param: %Inner; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Outer.as.Destroy.impl.Op(%self.param: %ptr.5df) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @MakeOuter() -> %return.param: %Outer { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %MakeInner.ref.loc28_16: %MakeInner.type = name_ref MakeInner, file.%MakeInner.decl [concrete = constants.%MakeInner] diff --git a/toolchain/check/testdata/class/local.carbon b/toolchain/check/testdata/class/local.carbon index 6bb23bb3929e..6898e0a1f99b 100644 --- a/toolchain/check/testdata/class/local.carbon +++ b/toolchain/check/testdata/class/local.carbon @@ -40,13 +40,6 @@ class A { // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: %B: type = class_type @B [concrete] @@ -54,11 +47,6 @@ class A { // 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: %Destroy.impl_witness.1bc: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.bac: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.e9c: type = pattern_type %ptr.bac [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n.033: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n.033 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -90,25 +78,32 @@ class A { // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %i32, (%Copy.impl_witness.a32) [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %B, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.06a: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.68a: %AggregateT.as_type.as.Destroy.impl.Op.type.06a = struct_value () [concrete] +// CHECK:STDOUT: %ptr.bac: type = ptr_type %B [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.68a, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -120,38 +115,6 @@ class A { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.e9c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.e9c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.bac = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.bac = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.7ce = return_slot_pattern [concrete] @@ -162,10 +125,6 @@ class A { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -186,10 +145,6 @@ class A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc23: %B.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.1bc] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n.033 [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -215,14 +170,16 @@ class A { // 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.loc26_20.2: = bound_method %.loc26_20.2, %specific_fn // CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc26_20.2(%.loc26_20.2) -// CHECK:STDOUT: %B.as.Destroy.impl.Op.bound: = bound_method %.loc26_19.2, constants.%B.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%B, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc26_19.3: %type_where = converted constants.%B, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc26_19.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.68a +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.68a, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc26_19: = bound_method %.loc26_19.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.bac = addr_of %.loc26_19.2 -// CHECK:STDOUT: %B.as.Destroy.impl.Op.call: init %empty_tuple.type = call %B.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc26_19(%addr) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @B.Make() -> %return.param: %B { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -247,5 +204,3 @@ class A { // CHECK:STDOUT: return %b to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.bac) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/method.carbon b/toolchain/check/testdata/class/method.carbon index 581b6f63af98..46302610b599 100644 --- a/toolchain/check/testdata/class/method.carbon +++ b/toolchain/check/testdata/class/method.carbon @@ -82,10 +82,6 @@ fn CallGOnInitializingExpr() -> i32 { // 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] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.955: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.k.0bf: type = struct_type {.k: %i32} [concrete] // CHECK:STDOUT: %complete_type.954: = complete_type_witness %struct_type.k.0bf [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -123,6 +119,12 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %Class.val: %Class = struct_value (%int_1.5d2) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Class, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.7c2: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: %CallWithAddr.type: type = fn_type @CallWithAddr [concrete] // CHECK:STDOUT: %CallWithAddr: %CallWithAddr.type = struct_value () [concrete] // CHECK:STDOUT: %CallFThroughPointer.type: type = fn_type @CallFThroughPointer [concrete] @@ -140,20 +142,20 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -294,22 +296,6 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.761 = binding_pattern self [concrete] @@ -348,10 +334,6 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc21: %Class.elem = field_decl k, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.955] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.k.0bf [concrete = constants.%complete_type.954] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -379,8 +361,6 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: fn @Class.G(%self.param: %ptr.e71) -> %i32; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Call(%c.param: %Class) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %c.ref: %Class = name_ref c, %c @@ -420,9 +400,13 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Class.F.bound: = bound_method %.loc39_20.1, %F.ref // CHECK:STDOUT: %.loc39_20.2: %Class = bind_value %.loc39_20.1 // CHECK:STDOUT: %Class.F.call: init %i32 = call %Class.F.bound(%.loc39_20.2) -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %.loc39_18.7, constants.%Class.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Class, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc39_18.8: %type_where = converted constants.%Class, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc39_18.7, constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc39_18.3: = bound_method %.loc39_18.7, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.e71 = addr_of %.loc39_18.7 -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Class.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc39_18.3(%addr) // CHECK:STDOUT: return %Class.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -440,9 +424,13 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Class.G.bound: = bound_method %c.ref, %G.ref // CHECK:STDOUT: %addr.loc44: %ptr.e71 = addr_of %c.ref // CHECK:STDOUT: %Class.G.call: init %i32 = call %Class.G.bound(%addr.loc44) -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%Class.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Class, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc43: %type_where = converted constants.%Class, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc43: %ptr.e71 = addr_of %c.var -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Class.as.Destroy.impl.Op.bound(%addr.loc43) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr.loc43) // CHECK:STDOUT: return %Class.G.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -480,9 +468,13 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Class.F.bound: = bound_method %.loc58_15.2, %F.ref // CHECK:STDOUT: %.loc58_15.3: %Class = bind_value %.loc58_15.2 // CHECK:STDOUT: %Class.F.call: init %i32 = call %Class.F.bound(%.loc58_15.3) -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %.loc58_15.2, constants.%Class.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Class, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc58_15.4: %type_where = converted constants.%Class, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc58_15.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc58_15.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.e71 = addr_of %.loc58_15.2 -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Class.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return %Class.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -496,9 +488,13 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Class.G.bound: = bound_method %.loc62_15.2, %G.ref // CHECK:STDOUT: %addr.loc62_15.1: %ptr.e71 = addr_of %.loc62_15.2 // CHECK:STDOUT: %Class.G.call: init %i32 = call %Class.G.bound(%addr.loc62_15.1) -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %.loc62_15.2, constants.%Class.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Class, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc62_15.3: %type_where = converted constants.%Class, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc62_15.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc62_15.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc62_15.2: %ptr.e71 = addr_of %.loc62_15.2 -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Class.as.Destroy.impl.Op.bound(%addr.loc62_15.2) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr.loc62_15.2) // CHECK:STDOUT: return %Class.G.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/nested.carbon b/toolchain/check/testdata/class/nested.carbon index 5bfa489a45e9..eb09aba0330c 100644 --- a/toolchain/check/testdata/class/nested.carbon +++ b/toolchain/check/testdata/class/nested.carbon @@ -67,26 +67,28 @@ fn F(a: Outer*) { // CHECK:STDOUT: %Inner.elem.c30: type = unbound_element_type %Inner, %ptr.5df [concrete] // CHECK:STDOUT: %Inner.G.type: type = fn_type @Inner.G [concrete] // CHECK:STDOUT: %Inner.G: %Inner.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.1dc: = impl_witness @Inner.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %pattern_type.27f: type = pattern_type %ptr.36a [concrete] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: %Inner.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.pi.po.qi: type = struct_type {.pi: %ptr.36a, .po: %ptr.5df, .qi: %ptr.36a} [concrete] // CHECK:STDOUT: %complete_type.7ae: = complete_type_witness %struct_type.pi.po.qi [concrete] // CHECK:STDOUT: %Outer.H.type: type = fn_type @Outer.H [concrete] // CHECK:STDOUT: %Outer.H: %Outer.H.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.elem.a16: type = unbound_element_type %Outer, %ptr.5df [concrete] // CHECK:STDOUT: %Outer.elem.fe9: type = unbound_element_type %Outer, %ptr.36a [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.34a: = impl_witness @Outer.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %pattern_type.95c: type = pattern_type %ptr.5df [concrete] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.po.qo.pi: type = struct_type {.po: %ptr.5df, .qo: %ptr.5df, .pi: %ptr.36a} [concrete] // CHECK:STDOUT: %complete_type.e99: = complete_type_witness %struct_type.po.qo.pi [concrete] // CHECK:STDOUT: %pattern_type.e74: type = pattern_type %Outer [concrete] // CHECK:STDOUT: %pattern_type.906: type = pattern_type %Inner [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.c29: %type_where = facet_value %Inner, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.479: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.c29) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.450: %AggregateT.as_type.as.Destroy.impl.Op.type.479 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.27f: type = pattern_type %ptr.36a [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.438: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.450, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.c29) [concrete] +// CHECK:STDOUT: %facet_value.4b4: %type_where = facet_value %Outer, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.926: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.4b4) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.581: %AggregateT.as_type.as.Destroy.impl.Op.type.926 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.95c: type = pattern_type %ptr.5df [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.cc9: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.581, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.4b4) [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] @@ -142,44 +144,12 @@ fn F(a: Outer*) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Inner.as.Destroy.impl: @Inner.%Self.ref.loc22 as constants.%Destroy.type { -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.decl: %Inner.as.Destroy.impl.Op.type = fn_decl @Inner.as.Destroy.impl.Op [concrete = constants.%Inner.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.27f = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.27f = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc22: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.36a = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner [concrete = constants.%Inner] -// CHECK:STDOUT: %self: %ptr.36a = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Inner.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Inner.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Outer.as.Destroy.impl: @Outer.%Self.ref.loc15 as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: %Outer.as.Destroy.impl.Op.type = fn_decl @Outer.as.Destroy.impl.Op [concrete = constants.%Outer.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.95c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.95c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.5df = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer [concrete = constants.%Outer] -// CHECK:STDOUT: %self: %ptr.5df = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Outer { // CHECK:STDOUT: %Outer.F.decl: %Outer.F.type = fn_decl @Outer.F [concrete = constants.%Outer.F] {} {} // CHECK:STDOUT: %Inner.decl: type = class_decl @Inner [concrete = constants.%Inner] {} {} // CHECK:STDOUT: %Outer.H.decl: %Outer.H.type = fn_decl @Outer.H [concrete = constants.%Outer.H] {} {} -// CHECK:STDOUT: %Self.ref.loc40: type = name_ref Self, constants.%Outer [concrete = constants.%Outer] -// CHECK:STDOUT: %ptr.loc40: type = ptr_type %Self.ref.loc40 [concrete = constants.%ptr.5df] +// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer [concrete = constants.%Outer] +// CHECK:STDOUT: %ptr.loc40: type = ptr_type %Self.ref [concrete = constants.%ptr.5df] // CHECK:STDOUT: %.loc40: %Outer.elem.a16 = field_decl po, element0 [concrete] // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %ptr.loc41: type = ptr_type %Outer.ref [concrete = constants.%ptr.5df] @@ -187,10 +157,6 @@ fn F(a: Outer*) { // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, %Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %ptr.loc42: type = ptr_type %Inner.ref [concrete = constants.%ptr.36a] // CHECK:STDOUT: %.loc42: %Outer.elem.fe9 = field_decl pi, element2 [concrete] -// CHECK:STDOUT: %Self.ref.loc15: type = name_ref Self, constants.%Outer [concrete = constants.%Outer] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.34a] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.po.qo.pi [concrete = constants.%complete_type.e99] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -206,8 +172,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Inner { -// CHECK:STDOUT: %Self.ref.loc23: type = name_ref Self, constants.%Inner [concrete = constants.%Inner] -// CHECK:STDOUT: %ptr.loc23: type = ptr_type %Self.ref.loc23 [concrete = constants.%ptr.36a] +// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner [concrete = constants.%Inner] +// CHECK:STDOUT: %ptr.loc23: type = ptr_type %Self.ref [concrete = constants.%ptr.36a] // CHECK:STDOUT: %.loc23: %Inner.elem.640 = field_decl pi, element0 [concrete] // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %ptr.loc24: type = ptr_type %Outer.ref [concrete = constants.%ptr.5df] @@ -216,10 +182,6 @@ fn F(a: Outer*) { // CHECK:STDOUT: %ptr.loc25: type = ptr_type %Inner.ref [concrete = constants.%ptr.36a] // CHECK:STDOUT: %.loc25: %Inner.elem.640 = field_decl qi, element2 [concrete] // CHECK:STDOUT: %Inner.G.decl: %Inner.G.type = fn_decl @Inner.G [concrete = constants.%Inner.G] {} {} -// CHECK:STDOUT: %Self.ref.loc22: type = name_ref Self, constants.%Inner [concrete = constants.%Inner] -// CHECK:STDOUT: impl_decl @Inner.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.decl), @Inner.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.1dc] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.pi.po.qi [concrete = constants.%complete_type.7ae] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -249,12 +211,20 @@ fn F(a: Outer*) { // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %i: ref %Inner = bind_name i, %i.var -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%Inner.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc19: %type_where = facet_value constants.%Inner, () [concrete = constants.%facet_value.c29] +// CHECK:STDOUT: %.loc19: %type_where = converted constants.%Inner, %facet_value.loc19 [concrete = constants.%facet_value.c29] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc19: = bound_method %i.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.450 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.450, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.c29) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.438] +// CHECK:STDOUT: %bound_method.loc19: = bound_method %i.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc19: %ptr.36a = addr_of %i.var -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Inner.as.Destroy.impl.Op.bound(%addr.loc19) -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.bound: = bound_method %o.var, constants.%Outer.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc19: init %empty_tuple.type = call %bound_method.loc19(%addr.loc19) +// CHECK:STDOUT: %facet_value.loc18: %type_where = facet_value constants.%Outer, () [concrete = constants.%facet_value.4b4] +// CHECK:STDOUT: %.loc18: %type_where = converted constants.%Outer, %facet_value.loc18 [concrete = constants.%facet_value.4b4] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc18: = bound_method %o.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.581 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.581, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4b4) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.cc9] +// CHECK:STDOUT: %bound_method.loc18: = bound_method %o.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc18: %ptr.5df = addr_of %o.var -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Outer.as.Destroy.impl.Op.bound(%addr.loc18) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc18: init %empty_tuple.type = call %bound_method.loc18(%addr.loc18) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -274,17 +244,23 @@ fn F(a: Outer*) { // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %i: ref %Inner = bind_name i, %i.var -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%Inner.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc30: %type_where = facet_value constants.%Inner, () [concrete = constants.%facet_value.c29] +// CHECK:STDOUT: %.loc30: %type_where = converted constants.%Inner, %facet_value.loc30 [concrete = constants.%facet_value.c29] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc30: = bound_method %i.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.450 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.450, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.c29) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.438] +// CHECK:STDOUT: %bound_method.loc30: = bound_method %i.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc30: %ptr.36a = addr_of %i.var -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Inner.as.Destroy.impl.Op.bound(%addr.loc30) -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.bound: = bound_method %o.var, constants.%Outer.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %bound_method.loc30(%addr.loc30) +// CHECK:STDOUT: %facet_value.loc29: %type_where = facet_value constants.%Outer, () [concrete = constants.%facet_value.4b4] +// CHECK:STDOUT: %.loc29: %type_where = converted constants.%Outer, %facet_value.loc29 [concrete = constants.%facet_value.4b4] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc29: = bound_method %o.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.581 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.581, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4b4) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.cc9] +// CHECK:STDOUT: %bound_method.loc29: = bound_method %o.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc29: %ptr.5df = addr_of %o.var -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Outer.as.Destroy.impl.Op.bound(%addr.loc29) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc29: init %empty_tuple.type = call %bound_method.loc29(%addr.loc29) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Inner.as.Destroy.impl.Op(%self.param: %ptr.36a) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Outer.H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -301,17 +277,23 @@ fn F(a: Outer*) { // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %i: ref %Inner = bind_name i, %i.var -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%Inner.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc37: %type_where = facet_value constants.%Inner, () [concrete = constants.%facet_value.c29] +// CHECK:STDOUT: %.loc37: %type_where = converted constants.%Inner, %facet_value.loc37 [concrete = constants.%facet_value.c29] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc37: = bound_method %i.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.450 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.450, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.c29) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.438] +// CHECK:STDOUT: %bound_method.loc37: = bound_method %i.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc37: %ptr.36a = addr_of %i.var -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Inner.as.Destroy.impl.Op.bound(%addr.loc37) -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.bound: = bound_method %o.var, constants.%Outer.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc37: init %empty_tuple.type = call %bound_method.loc37(%addr.loc37) +// CHECK:STDOUT: %facet_value.loc36: %type_where = facet_value constants.%Outer, () [concrete = constants.%facet_value.4b4] +// CHECK:STDOUT: %.loc36: %type_where = converted constants.%Outer, %facet_value.loc36 [concrete = constants.%facet_value.4b4] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc36: = bound_method %o.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.581 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.581, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4b4) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.cc9] +// CHECK:STDOUT: %bound_method.loc36: = bound_method %o.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc36: %ptr.5df = addr_of %o.var -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Outer.as.Destroy.impl.Op.bound(%addr.loc36) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc36: init %empty_tuple.type = call %bound_method.loc36(%addr.loc36) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Outer.as.Destroy.impl.Op(%self.param: %ptr.5df) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param: %ptr.5df) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { diff --git a/toolchain/check/testdata/class/nested_name.carbon b/toolchain/check/testdata/class/nested_name.carbon index a1449f8b8a9e..0dd6f51b9a39 100644 --- a/toolchain/check/testdata/class/nested_name.carbon +++ b/toolchain/check/testdata/class/nested_name.carbon @@ -38,20 +38,8 @@ fn G(o: Outer) { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Inner.elem: type = unbound_element_type %Inner, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.1dc: = impl_witness @Inner.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.36a: type = ptr_type %Inner [concrete] -// CHECK:STDOUT: %pattern_type.27f: type = pattern_type %ptr.36a [concrete] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: %Inner.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.34a: = impl_witness @Outer.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.5df: type = ptr_type %Outer [concrete] -// CHECK:STDOUT: %pattern_type.95c: type = pattern_type %ptr.5df [concrete] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = 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: %pattern_type.906: type = pattern_type %Inner [concrete] @@ -71,21 +59,28 @@ fn G(o: Outer) { // CHECK:STDOUT: %pattern_type.e74: type = pattern_type %Outer [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Inner, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.479: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.450: %AggregateT.as_type.as.Destroy.impl.Op.type.479 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.36a: type = ptr_type %Inner [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.450, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] -// 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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -124,44 +119,8 @@ fn G(o: Outer) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Inner.as.Destroy.impl: @Inner.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.decl: %Inner.as.Destroy.impl.Op.type = fn_decl @Inner.as.Destroy.impl.Op [concrete = constants.%Inner.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.27f = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.27f = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.36a = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner [concrete = constants.%Inner] -// CHECK:STDOUT: %self: %ptr.36a = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Inner.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Inner.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Outer.as.Destroy.impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: %Outer.as.Destroy.impl.Op.type = fn_decl @Outer.as.Destroy.impl.Op [concrete = constants.%Outer.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.95c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.95c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.5df = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer [concrete = constants.%Outer] -// CHECK:STDOUT: %self: %ptr.5df = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Outer { // CHECK:STDOUT: %Inner.decl: type = class_decl @Inner [concrete = constants.%Inner] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer [concrete = constants.%Outer] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.34a] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -174,10 +133,6 @@ fn G(o: Outer) { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: %Inner.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner [concrete = constants.%Inner] -// CHECK:STDOUT: impl_decl @Inner.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.decl), @Inner.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.1dc] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -186,10 +141,6 @@ fn G(o: Outer) { // CHECK:STDOUT: .n = %.loc17 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Inner.as.Destroy.impl.Op(%self.param: %ptr.36a) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Outer.as.Destroy.impl.Op(%self.param: %ptr.5df) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%oi.param: %Inner) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %oi.ref: %Inner = name_ref oi, %oi @@ -211,14 +162,18 @@ fn G(o: Outer) { // CHECK:STDOUT: %i.var_patt: %pattern_type.906 = var_pattern %i.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var %i.var_patt -// CHECK:STDOUT: %.loc26: type = splice_block %Inner.ref [concrete = constants.%Inner] { +// CHECK:STDOUT: %.loc26_11: type = splice_block %Inner.ref [concrete = constants.%Inner] { // CHECK:STDOUT: %o.ref: %Outer = name_ref o, %o // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: } // CHECK:STDOUT: %i: ref %Inner = bind_name i, %i.var -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%Inner.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Inner, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc26_3: %type_where = converted constants.%Inner, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.450 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.450, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %i.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.36a = addr_of %i.var -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Inner.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/partial.carbon b/toolchain/check/testdata/class/partial.carbon index 2d22828b41c1..eba65cc3d3a3 100644 --- a/toolchain/check/testdata/class/partial.carbon +++ b/toolchain/check/testdata/class/partial.carbon @@ -171,7 +171,7 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.43f: type = partial_type %C [concrete] -// CHECK:STDOUT: %pattern_type.249: type = pattern_type %.43f [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %.43f [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -181,8 +181,8 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %p.patt: %pattern_type.249 = binding_pattern p [concrete] -// CHECK:STDOUT: %p.param_patt: %pattern_type.249 = value_param_pattern %p.patt, call_param0 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern %p.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.43f = value_param call_param0 // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.2 [concrete = constants.%.43f] { @@ -200,7 +200,7 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.43f: type = partial_type %C [concrete] -// CHECK:STDOUT: %pattern_type.249: type = pattern_type %.43f [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %.43f [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -210,8 +210,8 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %p.patt: %pattern_type.249 = binding_pattern p [concrete] -// CHECK:STDOUT: %p.param_patt: %pattern_type.249 = value_param_pattern %p.patt, call_param0 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern %p.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.43f = value_param call_param0 // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.2 [concrete = constants.%.43f] { @@ -229,7 +229,7 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.43f: type = partial_type %C [concrete] -// CHECK:STDOUT: %pattern_type.249: type = pattern_type %.43f [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %.43f [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -239,8 +239,8 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %pattern_type.249 = binding_pattern p [concrete] -// CHECK:STDOUT: %p.param_patt: %pattern_type.249 = value_param_pattern %p.patt, call_param0 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern %p.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.43f = value_param call_param0 // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.2 [concrete = constants.%.43f] { @@ -258,7 +258,7 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %.604: type = partial_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.f79: type = pattern_type %.604 [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %.604 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -268,8 +268,8 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %pattern_type.f79 = binding_pattern p [concrete] -// CHECK:STDOUT: %p.param_patt: %pattern_type.f79 = value_param_pattern %p.patt, call_param0 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern %p.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.604 = value_param call_param0 // CHECK:STDOUT: %.loc13_9.1: type = splice_block %.loc13_9.2 [concrete = constants.%.604] { @@ -382,7 +382,7 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %.43f: type = partial_type %C [concrete] // CHECK:STDOUT: %.a34: type = partial_type %.43f [concrete] -// CHECK:STDOUT: %pattern_type.2e7: type = pattern_type %.a34 [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %.a34 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -392,8 +392,8 @@ fn F[T:! type](p: partial T*); // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %p.patt: %pattern_type.2e7 = binding_pattern p [concrete] -// CHECK:STDOUT: %p.param_patt: %pattern_type.2e7 = value_param_pattern %p.patt, call_param0 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p [concrete] +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern %p.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %.a34 = value_param call_param0 // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.2 [concrete = constants.%.a34] { diff --git a/toolchain/check/testdata/class/raw_self.carbon b/toolchain/check/testdata/class/raw_self.carbon index 329e26c2e2d3..f423ccf2a1a2 100644 --- a/toolchain/check/testdata/class/raw_self.carbon +++ b/toolchain/check/testdata/class/raw_self.carbon @@ -48,10 +48,6 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // 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] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -69,13 +65,11 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -136,22 +130,6 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt.loc21_17: %pattern_type.796 = binding_pattern self [concrete] @@ -202,10 +180,6 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc18: %Class.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -259,5 +233,3 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: return %.loc26_26 to %return.loc25 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/raw_self_type.carbon b/toolchain/check/testdata/class/raw_self_type.carbon index 96ff3f464a72..9c5e14f8b9fd 100644 --- a/toolchain/check/testdata/class/raw_self_type.carbon +++ b/toolchain/check/testdata/class/raw_self_type.carbon @@ -34,15 +34,10 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.955: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = 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: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Copy.Op.type: type = fn_type @Copy.Op [concrete] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] @@ -54,39 +49,30 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.e71, (%Copy.impl_witness.929) [concrete] // CHECK:STDOUT: %.93e: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: = specific_function %ptr.as.Copy.impl.Op.275, @ptr.as.Copy.impl.Op(%Class) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.type.302: type = fn_type @ptr.as.Destroy.impl.Op, @ptr.as.Destroy.impl(%Class) [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.e41: %ptr.as.Destroy.impl.Op.type.302 = struct_value () [concrete] // CHECK:STDOUT: %ptr.0dd: type = ptr_type %ptr.e71 [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.specific_fn: = specific_function %ptr.as.Destroy.impl.Op.e41, @ptr.as.Destroy.impl.Op(%Class) [concrete] // CHECK:STDOUT: %MemberNamedSelf: type = class_type @MemberNamedSelf [concrete] // CHECK:STDOUT: %Self.362: type = class_type @Self [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.5bb: = impl_witness @Self.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.fbf: type = ptr_type %Self.362 [concrete] -// CHECK:STDOUT: %pattern_type.364: type = pattern_type %ptr.fbf [concrete] -// CHECK:STDOUT: %Self.as.Destroy.impl.Op.type: type = fn_type @Self.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Self.as.Destroy.impl.Op: %Self.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.356: type = pattern_type %MemberNamedSelf [concrete] // CHECK:STDOUT: %pattern_type.c06: type = pattern_type %Self.362 [concrete] // CHECK:STDOUT: %MemberNamedSelf.F.type: type = fn_type @MemberNamedSelf.F [concrete] // CHECK:STDOUT: %MemberNamedSelf.F: %MemberNamedSelf.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.36d: = impl_witness @MemberNamedSelf.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.9b1: type = ptr_type %MemberNamedSelf [concrete] -// CHECK:STDOUT: %pattern_type.64a: type = pattern_type %ptr.9b1 [concrete] -// CHECK:STDOUT: %MemberNamedSelf.as.Destroy.impl.Op.type: type = fn_type @MemberNamedSelf.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %MemberNamedSelf.as.Destroy.impl.Op: %MemberNamedSelf.as.Destroy.impl.Op.type = struct_value () [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.0e4: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.31f) = import_ref Core//prelude/parts/copy, loc36_31, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.8a8)] // CHECK:STDOUT: %Copy.impl_witness_table.53c = impl_witness_table (%Core.import_ref.0e4), @ptr.as.Copy.impl [concrete] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -113,60 +99,8 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Self.as.Destroy.impl: @Self.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Self.as.Destroy.impl.Op.decl: %Self.as.Destroy.impl.Op.type = fn_decl @Self.as.Destroy.impl.Op [concrete = constants.%Self.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.364 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.364 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc23: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.fbf = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Self.362 [concrete = constants.%Self.362] -// CHECK:STDOUT: %self: %ptr.fbf = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Self.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Self.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @MemberNamedSelf.as.Destroy.impl: @MemberNamedSelf.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %MemberNamedSelf.as.Destroy.impl.Op.decl: %MemberNamedSelf.as.Destroy.impl.Op.type = fn_decl @MemberNamedSelf.as.Destroy.impl.Op [concrete = constants.%MemberNamedSelf.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.64a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.64a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc22: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.9b1 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%MemberNamedSelf [concrete = constants.%MemberNamedSelf] -// CHECK:STDOUT: %self: %ptr.9b1 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %MemberNamedSelf.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @MemberNamedSelf.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.955] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -190,10 +124,6 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: %Self.ref.loc25_20: type = name_ref r#Self, @MemberNamedSelf.%Self.decl [concrete = constants.%Self.362] // CHECK:STDOUT: %y.loc25: %Self.362 = bind_name y, %y.param.loc25 // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%MemberNamedSelf [concrete = constants.%MemberNamedSelf] -// CHECK:STDOUT: impl_decl @MemberNamedSelf.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@MemberNamedSelf.as.Destroy.impl.%MemberNamedSelf.as.Destroy.impl.Op.decl), @MemberNamedSelf.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.36d] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -204,10 +134,6 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Self { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Self.362 [concrete = constants.%Self.362] -// CHECK:STDOUT: impl_decl @Self.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Self.as.Destroy.impl.%Self.as.Destroy.impl.Op.decl), @Self.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.5bb] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -258,14 +184,8 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Self.as.Destroy.impl.Op(%self.param: %ptr.fbf) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @MemberNamedSelf.F(%x.param.loc28: %MemberNamedSelf, %y.param.loc28: %Self.362) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @MemberNamedSelf.as.Destroy.impl.Op(%self.param: %ptr.9b1) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/redeclaration.carbon b/toolchain/check/testdata/class/redeclaration.carbon index 58d49bfb6bf6..3c8957ed515b 100644 --- a/toolchain/check/testdata/class/redeclaration.carbon +++ b/toolchain/check/testdata/class/redeclaration.carbon @@ -29,24 +29,15 @@ fn Class.F[self: Self](b: ()) {} // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -75,22 +66,6 @@ fn Class.F[self: Self](b: ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.761 = binding_pattern self [concrete] @@ -108,10 +83,6 @@ fn Class.F[self: Self](b: ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: %b.loc18: %empty_tuple.type = bind_name b, %b.param.loc18 // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -125,5 +96,3 @@ fn Class.F[self: Self](b: ()) {} // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/redeclaration_introducer.carbon b/toolchain/check/testdata/class/redeclaration_introducer.carbon index b07972a1756c..e83906bd7eb9 100644 --- a/toolchain/check/testdata/class/redeclaration_introducer.carbon +++ b/toolchain/check/testdata/class/redeclaration_introducer.carbon @@ -26,34 +26,15 @@ abstract class C {} // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.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: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -72,59 +53,7 @@ abstract class C {} // CHECK:STDOUT: %C.decl.loc21: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc20: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc21: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -133,10 +62,6 @@ abstract class C {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -145,10 +70,6 @@ abstract class C {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -156,9 +77,3 @@ abstract class C {} // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/reenter_scope.carbon b/toolchain/check/testdata/class/reenter_scope.carbon index ccb60715a7db..88a1b0eae776 100644 --- a/toolchain/check/testdata/class/reenter_scope.carbon +++ b/toolchain/check/testdata/class/reenter_scope.carbon @@ -35,13 +35,6 @@ fn Class.F() -> i32 { // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = 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: } @@ -49,12 +42,10 @@ fn Class.F() -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -75,22 +66,6 @@ fn Class.F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.7ce = return_slot_pattern [concrete] @@ -110,10 +85,6 @@ fn Class.F() -> i32 { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -135,5 +106,3 @@ fn Class.F() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: fn @Class.G() -> %i32; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/reorder.carbon b/toolchain/check/testdata/class/reorder.carbon index fce6f81cb14d..8215535c5fc6 100644 --- a/toolchain/check/testdata/class/reorder.carbon +++ b/toolchain/check/testdata/class/reorder.carbon @@ -35,13 +35,6 @@ class Class { // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = 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: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -66,13 +59,11 @@ class Class { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -87,22 +78,6 @@ class Class { // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.7ce = return_slot_pattern [concrete] @@ -122,10 +97,6 @@ class Class { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -156,5 +127,3 @@ class Class { // CHECK:STDOUT: return %.loc21 to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/reorder_qualified.carbon b/toolchain/check/testdata/class/reorder_qualified.carbon index 0215ce196fd2..8f16fb3c2f31 100644 --- a/toolchain/check/testdata/class/reorder_qualified.carbon +++ b/toolchain/check/testdata/class/reorder_qualified.carbon @@ -64,13 +64,6 @@ class A { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cbe: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.01b: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.11c: type = pattern_type %ptr.01b [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.b.0a3: type = struct_type {.b: %i32} [concrete] // CHECK:STDOUT: %complete_type.ba8: = complete_type_witness %struct_type.b.0a3 [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] @@ -79,31 +72,16 @@ class A { // CHECK:STDOUT: %D.DF.type: type = fn_type @D.DF [concrete] // CHECK:STDOUT: %D.DF: %D.DF.type = struct_value () [concrete] // CHECK:STDOUT: %D.elem: type = unbound_element_type %D, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.8b4: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.321: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.37e: type = pattern_type %ptr.321 [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.d.b7b: type = struct_type {.d: %i32} [concrete] // CHECK:STDOUT: %complete_type.860: = complete_type_witness %struct_type.d.b7b [concrete] // CHECK:STDOUT: %C.CF.type: type = fn_type @C.CF [concrete] // CHECK:STDOUT: %C.CF: %C.CF.type = struct_value () [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.08e: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.388: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.093: type = pattern_type %ptr.388 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.c.b66: type = struct_type {.c: %i32} [concrete] // CHECK:STDOUT: %complete_type.836: = complete_type_witness %struct_type.c.b66 [concrete] // CHECK:STDOUT: %A.AF.type: type = fn_type @A.AF [concrete] // CHECK:STDOUT: %A.AF: %A.AF.type = struct_value () [concrete] // CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.ba9: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %complete_type.fd7: = complete_type_witness %struct_type.a.ba9 [concrete] // CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] @@ -147,21 +125,43 @@ class A { // CHECK:STDOUT: %bound_method.9cd: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_4.940: %i32 = int_value 4 [concrete] // CHECK:STDOUT: %D.val: %D = struct_value (%int_4.940) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.1f3: %type_where = facet_value %D, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.473: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.1f3) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.c27: %AggregateT.as_type.as.Destroy.impl.Op.type.473 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.321: type = ptr_type %D [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.c92: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.c27, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.1f3) [concrete] +// CHECK:STDOUT: %facet_value.fa1: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.006: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.fa1) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bf0: %AggregateT.as_type.as.Destroy.impl.Op.type.006 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.388: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.f0d: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.bf0, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.fa1) [concrete] +// CHECK:STDOUT: %facet_value.69b: %type_where = facet_value %B, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cf4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.69b) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cec: %AggregateT.as_type.as.Destroy.impl.Op.type.cf4 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.01b: type = ptr_type %B [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.fed: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cec, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.69b) [concrete] +// CHECK:STDOUT: %facet_value.bb7: %type_where = facet_value %A, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d35: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.bb7) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.900: %AggregateT.as_type.as.Destroy.impl.Op.type.d35 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4a1: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.900, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.bb7) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -173,70 +173,6 @@ class A { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.11c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.11c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.01b = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.01b = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.37e = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.37e = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc24: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.321 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.321 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.093 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.093 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc23: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.388 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.388 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} @@ -244,10 +180,6 @@ class A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc50: %A.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.ba9 [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -265,10 +197,6 @@ class A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc20: %B.elem = field_decl b, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cbe] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.b.0a3 [concrete = constants.%complete_type.ba8] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -289,10 +217,6 @@ class A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc46: %C.elem = field_decl c, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.08e] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.c.b66 [concrete = constants.%complete_type.836] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -314,10 +238,6 @@ class A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc28: %D.elem = field_decl d, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.8b4] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.d.b7b [concrete = constants.%complete_type.860] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -337,8 +257,6 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: fn @B.BF(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.01b) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @D.F(); // CHECK:STDOUT: // CHECK:STDOUT: fn @D.DF() { @@ -359,8 +277,8 @@ class A { // CHECK:STDOUT: %.loc33_25.3: ref %i32 = class_element_access %a.var, element0 // CHECK:STDOUT: %.loc33_25.4: init %i32 = initialize_from %.loc33_25.2 to %.loc33_25.3 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %.loc33_25.5: init %A = class_init (%.loc33_25.4), %a.var [concrete = constants.%A.val] -// CHECK:STDOUT: %.loc33_7: init %A = converted %.loc33_25.1, %.loc33_25.5 [concrete = constants.%A.val] -// CHECK:STDOUT: assign %a.var, %.loc33_7 +// CHECK:STDOUT: %.loc33_7.1: init %A = converted %.loc33_25.1, %.loc33_25.5 [concrete = constants.%A.val] +// CHECK:STDOUT: assign %a.var, %.loc33_7.1 // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: ref %A = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { @@ -379,8 +297,8 @@ class A { // CHECK:STDOUT: %.loc34_25.3: ref %i32 = class_element_access %b.var, element0 // CHECK:STDOUT: %.loc34_25.4: init %i32 = initialize_from %.loc34_25.2 to %.loc34_25.3 [concrete = constants.%int_2.ef8] // CHECK:STDOUT: %.loc34_25.5: init %B = class_init (%.loc34_25.4), %b.var [concrete = constants.%B.val] -// CHECK:STDOUT: %.loc34_7: init %B = converted %.loc34_25.1, %.loc34_25.5 [concrete = constants.%B.val] -// CHECK:STDOUT: assign %b.var, %.loc34_7 +// CHECK:STDOUT: %.loc34_7.1: init %B = converted %.loc34_25.1, %.loc34_25.5 [concrete = constants.%B.val] +// CHECK:STDOUT: assign %b.var, %.loc34_7.1 // CHECK:STDOUT: %B.ref: type = name_ref B, @A.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %b: ref %B = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { @@ -399,8 +317,8 @@ class A { // CHECK:STDOUT: %.loc35_25.3: ref %i32 = class_element_access %c.var, element0 // CHECK:STDOUT: %.loc35_25.4: init %i32 = initialize_from %.loc35_25.2 to %.loc35_25.3 [concrete = constants.%int_3.822] // CHECK:STDOUT: %.loc35_25.5: init %C = class_init (%.loc35_25.4), %c.var [concrete = constants.%C.val] -// CHECK:STDOUT: %.loc35_7: init %C = converted %.loc35_25.1, %.loc35_25.5 [concrete = constants.%C.val] -// CHECK:STDOUT: assign %c.var, %.loc35_7 +// CHECK:STDOUT: %.loc35_7.1: init %C = converted %.loc35_25.1, %.loc35_25.5 [concrete = constants.%C.val] +// CHECK:STDOUT: assign %c.var, %.loc35_7.1 // CHECK:STDOUT: %C.ref: type = name_ref C, @B.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { @@ -419,8 +337,8 @@ class A { // CHECK:STDOUT: %.loc36_25.3: ref %i32 = class_element_access %d.var, element0 // CHECK:STDOUT: %.loc36_25.4: init %i32 = initialize_from %.loc36_25.2 to %.loc36_25.3 [concrete = constants.%int_4.940] // CHECK:STDOUT: %.loc36_25.5: init %D = class_init (%.loc36_25.4), %d.var [concrete = constants.%D.val] -// CHECK:STDOUT: %.loc36_7: init %D = converted %.loc36_25.1, %.loc36_25.5 [concrete = constants.%D.val] -// CHECK:STDOUT: assign %d.var, %.loc36_7 +// CHECK:STDOUT: %.loc36_7.1: init %D = converted %.loc36_25.1, %.loc36_25.5 [concrete = constants.%D.val] +// CHECK:STDOUT: assign %d.var, %.loc36_7.1 // CHECK:STDOUT: %D.ref: type = name_ref D, @C.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %d: ref %D = bind_name d, %d.var // CHECK:STDOUT: %AF.ref: %A.AF.type = name_ref AF, @A.%A.AF.decl [concrete = constants.%A.AF] @@ -431,28 +349,38 @@ class A { // CHECK:STDOUT: %C.CF.call: init %empty_tuple.type = call %CF.ref() // CHECK:STDOUT: %DF.ref: %D.DF.type = name_ref DF, @D.%D.DF.decl [concrete = constants.%D.DF] // CHECK:STDOUT: %D.DF.call: init %empty_tuple.type = call %DF.ref() -// CHECK:STDOUT: %D.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%D.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc36: %type_where = facet_value constants.%D, () [concrete = constants.%facet_value.1f3] +// CHECK:STDOUT: %.loc36_7.2: %type_where = converted constants.%D, %facet_value.loc36 [concrete = constants.%facet_value.1f3] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc36: = bound_method %d.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.c27 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.c27, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.1f3) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.c92] +// CHECK:STDOUT: %bound_method.loc36_7: = bound_method %d.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc36: %ptr.321 = addr_of %d.var -// CHECK:STDOUT: %D.as.Destroy.impl.Op.call: init %empty_tuple.type = call %D.as.Destroy.impl.Op.bound(%addr.loc36) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc36: init %empty_tuple.type = call %bound_method.loc36_7(%addr.loc36) +// CHECK:STDOUT: %facet_value.loc35: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.fa1] +// CHECK:STDOUT: %.loc35_7.2: %type_where = converted constants.%C, %facet_value.loc35 [concrete = constants.%facet_value.fa1] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc35: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bf0 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.bf0, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.fa1) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.f0d] +// CHECK:STDOUT: %bound_method.loc35_7: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc35: %ptr.388 = addr_of %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc35) -// CHECK:STDOUT: %B.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%B.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc35: init %empty_tuple.type = call %bound_method.loc35_7(%addr.loc35) +// CHECK:STDOUT: %facet_value.loc34: %type_where = facet_value constants.%B, () [concrete = constants.%facet_value.69b] +// CHECK:STDOUT: %.loc34_7.2: %type_where = converted constants.%B, %facet_value.loc34 [concrete = constants.%facet_value.69b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc34: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cec +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cec, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.69b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.fed] +// CHECK:STDOUT: %bound_method.loc34_7: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc34: %ptr.01b = addr_of %b.var -// CHECK:STDOUT: %B.as.Destroy.impl.Op.call: init %empty_tuple.type = call %B.as.Destroy.impl.Op.bound(%addr.loc34) -// CHECK:STDOUT: %A.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%A.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc34: init %empty_tuple.type = call %bound_method.loc34_7(%addr.loc34) +// CHECK:STDOUT: %facet_value.loc33: %type_where = facet_value constants.%A, () [concrete = constants.%facet_value.bb7] +// CHECK:STDOUT: %.loc33_7.2: %type_where = converted constants.%A, %facet_value.loc33 [concrete = constants.%facet_value.bb7] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc33: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.900 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.900, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.bb7) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4a1] +// CHECK:STDOUT: %bound_method.loc33_7: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4 // CHECK:STDOUT: %addr.loc33: %ptr.6db = addr_of %a.var -// CHECK:STDOUT: %A.as.Destroy.impl.Op.call: init %empty_tuple.type = call %A.as.Destroy.impl.Op.bound(%addr.loc33) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc33: init %empty_tuple.type = call %bound_method.loc33_7(%addr.loc33) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.321) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.CF(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.388) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @A.AF(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/scope.carbon b/toolchain/check/testdata/class/scope.carbon index bc1b3aa709be..1661d7e8ff3d 100644 --- a/toolchain/check/testdata/class/scope.carbon +++ b/toolchain/check/testdata/class/scope.carbon @@ -45,13 +45,6 @@ fn Run() { // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] // CHECK:STDOUT: %Class.G.type: type = fn_type @Class.G [concrete] // CHECK:STDOUT: %Class.G: %Class.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.955: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = 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: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -79,25 +72,28 @@ fn Run() { // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -121,22 +117,6 @@ fn Run() { // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.7ce = return_slot_pattern [concrete] @@ -156,10 +136,6 @@ fn Run() { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.955] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -188,8 +164,6 @@ fn Run() { // CHECK:STDOUT: return %Class.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] @@ -212,7 +186,7 @@ fn Run() { // CHECK:STDOUT: %F.ref.loc30: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] // CHECK:STDOUT: %F.call: init %i32 = call %F.ref.loc30() // CHECK:STDOUT: assign %a.var, %F.call -// CHECK:STDOUT: %.loc30: type = splice_block %i32.loc30 [concrete = constants.%i32] { +// CHECK:STDOUT: %.loc30_10: type = splice_block %i32.loc30 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc30: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc30: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } @@ -226,21 +200,25 @@ fn Run() { // CHECK:STDOUT: %F.ref.loc31: %Class.F.type = name_ref F, @Class.%Class.F.decl [concrete = constants.%Class.F] // CHECK:STDOUT: %Class.F.call: init %i32 = call %F.ref.loc31() // CHECK:STDOUT: assign %b.var, %Class.F.call -// CHECK:STDOUT: %.loc31: type = splice_block %i32.loc31 [concrete = constants.%i32] { +// CHECK:STDOUT: %.loc31_10: type = splice_block %i32.loc31 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc31: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc31: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc31: = bound_method %b.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc31: = bound_method %b.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc31: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc31_3: %type_where = converted constants.%i32, %facet_value.loc31 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc31: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc31: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc31: %ptr.235 = addr_of %b.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc31: init %empty_tuple.type = call %bound_method.loc31(%addr.loc31) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc30: = bound_method %a.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc30: = bound_method %a.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc31: init %empty_tuple.type = call %bound_method.loc31(%addr.loc31) +// CHECK:STDOUT: %facet_value.loc30: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc30_3: %type_where = converted constants.%i32, %facet_value.loc30 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc30: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc30: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc30: %ptr.235 = addr_of %a.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %bound_method.loc30(%addr.loc30) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %bound_method.loc30(%addr.loc30) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/self.carbon b/toolchain/check/testdata/class/self.carbon index edcd8abfa210..24f6a17eea27 100644 --- a/toolchain/check/testdata/class/self.carbon +++ b/toolchain/check/testdata/class/self.carbon @@ -65,10 +65,6 @@ class Class { // 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] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -86,13 +82,11 @@ class Class { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -139,22 +133,6 @@ class Class { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.761 = binding_pattern self [concrete] @@ -191,10 +169,6 @@ class Class { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc8: %Class.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -234,8 +208,6 @@ class Class { // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return.loc15 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_return_self_value.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -245,13 +217,6 @@ class Class { // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete] // CHECK:STDOUT: %Class.F: %Class.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.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: } @@ -259,12 +224,10 @@ class Class { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -276,22 +239,6 @@ class Class { // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.761 = binding_pattern self [concrete] @@ -307,10 +254,6 @@ class Class { // CHECK:STDOUT: %return.param: ref = out_param call_param1 // CHECK:STDOUT: %return: ref = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -321,5 +264,3 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: fn @Class.F(%self.param: %Class) -> ; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/self_conversion.carbon b/toolchain/check/testdata/class/self_conversion.carbon index 6e52194ad660..04d987af38bc 100644 --- a/toolchain/check/testdata/class/self_conversion.carbon +++ b/toolchain/check/testdata/class/self_conversion.carbon @@ -47,13 +47,6 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %complete_type.fd7: = complete_type_witness %struct_type.a [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] @@ -62,13 +55,11 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %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: %ptr.11f: type = ptr_type %Base [concrete] +// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %Derived.AddrSelfBase.type: type = fn_type @Derived.AddrSelfBase [concrete] // CHECK:STDOUT: %Derived.AddrSelfBase: %Derived.AddrSelfBase.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.b1e: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base.b1e [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -98,6 +89,8 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0, @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.5d2: %i32 = int_value 1 [concrete] +// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -105,14 +98,12 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -176,46 +167,10 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: %Base.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -254,10 +209,6 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %self.loc23: %ptr.11f = bind_name self, %self.param.loc23 // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.b1e [concrete = constants.%complete_type.15c] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -270,8 +221,6 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Derived.SelfBase(%self.param.loc26: %Base) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %Base = name_ref self, %self.loc26 @@ -303,8 +252,6 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Call(%p.param: %ptr.404) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %p.ref.loc35: %ptr.404 = name_ref p, %p diff --git a/toolchain/check/testdata/class/self_type.carbon b/toolchain/check/testdata/class/self_type.carbon index e67c6da852ff..6b616b12806d 100644 --- a/toolchain/check/testdata/class/self_type.carbon +++ b/toolchain/check/testdata/class/self_type.carbon @@ -42,12 +42,6 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: %Class.Make: %Class.Make.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %ptr.e71 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.p: type = struct_type {.p: %ptr.e71} [concrete] // CHECK:STDOUT: %complete_type.56d: = complete_type_witness %struct_type.p [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -66,13 +60,11 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %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.0e4: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.31f) = import_ref Core//prelude/parts/copy, loc36_31, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.8a8)] // CHECK:STDOUT: %Copy.impl_witness_table.53c = impl_witness_table (%Core.import_ref.0e4), @ptr.as.Copy.impl [concrete] @@ -101,22 +93,6 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref.loc15 as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.761 = binding_pattern self [concrete] @@ -140,13 +116,9 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: %return.param: ref %Class = out_param call_param0 // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref.loc22: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %ptr: type = ptr_type %Self.ref.loc22 [concrete = constants.%ptr.e71] +// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] +// CHECK:STDOUT: %ptr: type = ptr_type %Self.ref [concrete = constants.%ptr.e71] // CHECK:STDOUT: %.loc22: %Class.elem = field_decl p, element0 [concrete] -// CHECK:STDOUT: %Self.ref.loc15: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.p [concrete = constants.%complete_type.56d] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -196,5 +168,3 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: return %s to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/static_method.carbon b/toolchain/check/testdata/class/static_method.carbon index 1a9a9010e8cb..381aced21afc 100644 --- a/toolchain/check/testdata/class/static_method.carbon +++ b/toolchain/check/testdata/class/static_method.carbon @@ -33,18 +33,18 @@ fn Run() -> i32 { // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.955: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = 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: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Class, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.7c2: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -79,22 +79,6 @@ fn Run() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.7ce = return_slot_pattern [concrete] @@ -105,10 +89,6 @@ fn Run() -> i32 { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.955] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -119,8 +99,6 @@ fn Run() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: fn @Class.F() -> %i32; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Run() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -133,9 +111,13 @@ fn Run() -> i32 { // CHECK:STDOUT: %c.ref: ref %Class = name_ref c, %c // CHECK:STDOUT: %F.ref: %Class.F.type = name_ref F, @Class.%Class.F.decl [concrete = constants.%Class.F] // CHECK:STDOUT: %Class.F.call: init %i32 = call %F.ref() -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%Class.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Class, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc20: %type_where = converted constants.%Class, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.e71 = addr_of %c.var -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Class.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return %Class.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/syntactic_merge_literal.carbon b/toolchain/check/testdata/class/syntactic_merge_literal.carbon index a82bcf2aed9d..3ea707f0b556 100644 --- a/toolchain/check/testdata/class/syntactic_merge_literal.carbon +++ b/toolchain/check/testdata/class/syntactic_merge_literal.carbon @@ -49,13 +49,6 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.506: type = class_type @C, @C(%a) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.587: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%a) [symbolic] -// CHECK:STDOUT: %ptr.128: type = ptr_type %C.506 [symbolic] -// CHECK:STDOUT: %pattern_type.d64: type = pattern_type %ptr.128 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%a) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %int_1000.ff9: Core.IntLiteral = int_value 1000 [concrete] @@ -81,23 +74,16 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %D.type: type = generic_class_type @D [concrete] // CHECK:STDOUT: %D.generic: %D.type = struct_value () [concrete] // CHECK:STDOUT: %D: type = class_type @D, @D(%b) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.d00: = impl_witness @D.%Destroy.impl_witness_table, @D.as.Destroy.impl(%b) [symbolic] -// CHECK:STDOUT: %ptr.779: type = ptr_type %D [symbolic] -// CHECK:STDOUT: %pattern_type.bf6: type = pattern_type %ptr.779 [symbolic] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op, @D.as.Destroy.impl(%b) [symbolic] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -158,74 +144,12 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%a.loc4_9.2: %i32) { -// CHECK:STDOUT: %a: %i32 = bind_symbolic_name a, 0 [symbolic = %a (constants.%a)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%a) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%a) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.587)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%a) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d64) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d64) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_18.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.128) = value_param call_param0 -// CHECK:STDOUT: %.loc4_18.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.506)] { -// CHECK:STDOUT: %.loc4_18.3: type = specific_constant constants.%C.506, @C(constants.%a) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_18.3 [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.128) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @D.as.Destroy.impl(@D.%b.loc6: %C.262) { -// CHECK:STDOUT: %b: %C.262 = bind_symbolic_name b, 0 [symbolic = %b (constants.%b)] -// CHECK:STDOUT: %D: type = class_type @D, @D(%b) [symbolic = %D (constants.%D)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.%Destroy.impl_witness_table, @D.as.Destroy.impl(%b) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.d00)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op, @D.as.Destroy.impl(%b) [symbolic = %D.as.Destroy.impl.Op.type (constants.%D.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: @D.as.Destroy.impl.%D.as.Destroy.impl.Op.type (%D.as.Destroy.impl.Op.type) = struct_value () [symbolic = %D.as.Destroy.impl.Op (constants.%D.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: @D.as.Destroy.impl.%D.as.Destroy.impl.Op.type (%D.as.Destroy.impl.Op.type) = fn_decl @D.as.Destroy.impl.Op [symbolic = @D.as.Destroy.impl.%D.as.Destroy.impl.Op (constants.%D.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @D.as.Destroy.impl.Op.%pattern_type (%pattern_type.bf6) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @D.as.Destroy.impl.Op.%pattern_type (%pattern_type.bf6) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @D.as.Destroy.impl.Op.%ptr (%ptr.779) = value_param call_param0 -// CHECK:STDOUT: %.loc6_23.2: type = splice_block %Self.ref [symbolic = %D (constants.%D)] { -// CHECK:STDOUT: %.loc6_23.3: type = specific_constant constants.%D, @D(constants.%b) [symbolic = %D (constants.%D)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_23.3 [symbolic = %D (constants.%D)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @D.as.Destroy.impl.Op.%ptr (%ptr.779) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%a.loc4_9.2: %i32) { // CHECK:STDOUT: %a.loc4_9.1: %i32 = bind_symbolic_name a, 0 [symbolic = %a.loc4_9.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.506 [symbolic = @C.as.Destroy.impl.%C (constants.%C.506)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%a) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.587)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -240,10 +164,6 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [symbolic = @D.as.Destroy.impl.%D (constants.%D)] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @D.as.Destroy.impl(constants.%b) [symbolic = @D.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.d00)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -252,68 +172,18 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%a.loc4_9.2: %i32) { -// CHECK:STDOUT: %a: %i32 = bind_symbolic_name a, 0 [symbolic = %a (constants.%a)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%a) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.128)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d64)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.128)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @D.as.Destroy.impl.Op(@D.%b.loc6: %C.262) { -// CHECK:STDOUT: %b: %C.262 = bind_symbolic_name b, 0 [symbolic = %b (constants.%b)] -// CHECK:STDOUT: %D: type = class_type @D, @D(%b) [symbolic = %D (constants.%D)] -// CHECK:STDOUT: %ptr: type = ptr_type %D [symbolic = %ptr (constants.%ptr.779)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.bf6)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @D.as.Destroy.impl.Op.%ptr (%ptr.779)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%a) { // CHECK:STDOUT: %a.loc4_9.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%a) { -// CHECK:STDOUT: %a => constants.%a -// CHECK:STDOUT: %C => constants.%C.506 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.587 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%a) { -// CHECK:STDOUT: %a => constants.%a -// CHECK:STDOUT: %C => constants.%C.506 -// CHECK:STDOUT: %ptr => constants.%ptr.128 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d64 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_1000.1b6) { // CHECK:STDOUT: %a.loc4_9.1 => constants.%int_1000.1b6 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D(constants.%b) { // CHECK:STDOUT: %b.loc5_9.1 => constants.%b // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @D.as.Destroy.impl(constants.%b) { -// CHECK:STDOUT: %b => constants.%b -// CHECK:STDOUT: %D => constants.%D -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.d00 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @D.as.Destroy.impl.Op(constants.%b) { -// CHECK:STDOUT: %b => constants.%b -// CHECK:STDOUT: %D => constants.%D -// CHECK:STDOUT: %ptr => constants.%ptr.779 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.bf6 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_int_mismatch.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -328,13 +198,6 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.506: type = class_type @C, @C(%a) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.587: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%a) [symbolic] -// CHECK:STDOUT: %ptr.128: type = ptr_type %C.506 [symbolic] -// CHECK:STDOUT: %pattern_type.d64: type = pattern_type %ptr.128 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%a) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %int_1000.ff9: Core.IntLiteral = int_value 1000 [concrete] @@ -362,23 +225,16 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %D.type.bbd080.2: type = generic_class_type @D.loc13 [concrete] // CHECK:STDOUT: %D.generic.4e2319.2: %D.type.bbd080.2 = struct_value () [concrete] // CHECK:STDOUT: %D.126b2d.2: type = class_type @D.loc13, @D.loc13(%b) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.d00: = impl_witness @D.loc13.%Destroy.impl_witness_table, @D.as.Destroy.impl(%b) [symbolic] -// CHECK:STDOUT: %ptr.779: type = ptr_type %D.126b2d.2 [symbolic] -// CHECK:STDOUT: %pattern_type.bf6: type = pattern_type %ptr.779 [symbolic] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op, @D.as.Destroy.impl(%b) [symbolic] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -439,74 +295,12 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%a.loc4_9.2: %i32) { -// CHECK:STDOUT: %a: %i32 = bind_symbolic_name a, 0 [symbolic = %a (constants.%a)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%a) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%a) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.587)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%a) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d64) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d64) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_18.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.128) = value_param call_param0 -// CHECK:STDOUT: %.loc4_18.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.506)] { -// CHECK:STDOUT: %.loc4_18.3: type = specific_constant constants.%C.506, @C(constants.%a) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_18.3 [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.128) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @D.as.Destroy.impl(@D.loc13.%b.loc13_9.2: %C.262) { -// CHECK:STDOUT: %b: %C.262 = bind_symbolic_name b, 0 [symbolic = %b (constants.%b)] -// CHECK:STDOUT: %D: type = class_type @D.loc13, @D.loc13(%b) [symbolic = %D (constants.%D.126b2d.2)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.loc13.%Destroy.impl_witness_table, @D.as.Destroy.impl(%b) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.d00)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op, @D.as.Destroy.impl(%b) [symbolic = %D.as.Destroy.impl.Op.type (constants.%D.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: @D.as.Destroy.impl.%D.as.Destroy.impl.Op.type (%D.as.Destroy.impl.Op.type) = struct_value () [symbolic = %D.as.Destroy.impl.Op (constants.%D.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @D.loc13.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: @D.as.Destroy.impl.%D.as.Destroy.impl.Op.type (%D.as.Destroy.impl.Op.type) = fn_decl @D.as.Destroy.impl.Op [symbolic = @D.as.Destroy.impl.%D.as.Destroy.impl.Op (constants.%D.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @D.as.Destroy.impl.Op.%pattern_type (%pattern_type.bf6) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @D.as.Destroy.impl.Op.%pattern_type (%pattern_type.bf6) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @D.as.Destroy.impl.Op.%ptr (%ptr.779) = value_param call_param0 -// CHECK:STDOUT: %.loc13_23.2: type = splice_block %Self.ref [symbolic = %D (constants.%D.126b2d.2)] { -// CHECK:STDOUT: %.loc13_23.3: type = specific_constant constants.%D.126b2d.2, @D.loc13(constants.%b) [symbolic = %D (constants.%D.126b2d.2)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc13_23.3 [symbolic = %D (constants.%D.126b2d.2)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @D.as.Destroy.impl.Op.%ptr (%ptr.779) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.loc13.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%a.loc4_9.2: %i32) { // CHECK:STDOUT: %a.loc4_9.1: %i32 = bind_symbolic_name a, 0 [symbolic = %a.loc4_9.1 (constants.%a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.506 [symbolic = @C.as.Destroy.impl.%C (constants.%C.506)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%a) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.587)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -527,10 +321,6 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D.126b2d.2 [symbolic = @D.as.Destroy.impl.%D (constants.%D.126b2d.2)] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @D.as.Destroy.impl(constants.%b) [symbolic = @D.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.d00)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -539,49 +329,12 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%a.loc4_9.2: %i32) { -// CHECK:STDOUT: %a: %i32 = bind_symbolic_name a, 0 [symbolic = %a (constants.%a)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%a) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.128)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d64)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.128)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @D.as.Destroy.impl.Op(@D.loc13.%b.loc13_9.2: %C.262) { -// CHECK:STDOUT: %b: %C.262 = bind_symbolic_name b, 0 [symbolic = %b (constants.%b)] -// CHECK:STDOUT: %D: type = class_type @D.loc13, @D.loc13(%b) [symbolic = %D (constants.%D.126b2d.2)] -// CHECK:STDOUT: %ptr: type = ptr_type %D [symbolic = %ptr (constants.%ptr.779)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.bf6)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @D.as.Destroy.impl.Op.%ptr (%ptr.779)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%a) { // CHECK:STDOUT: %a.loc4_9.1 => constants.%a // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%a) { -// CHECK:STDOUT: %a => constants.%a -// CHECK:STDOUT: %C => constants.%C.506 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.587 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%a) { -// CHECK:STDOUT: %a => constants.%a -// CHECK:STDOUT: %C => constants.%C.506 -// CHECK:STDOUT: %ptr => constants.%ptr.128 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d64 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_1000.1b6) { // CHECK:STDOUT: %a.loc4_9.1 => constants.%int_1000.1b6 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.loc5(constants.%b) { @@ -592,16 +345,3 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %b.loc13_9.1 => constants.%b // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @D.as.Destroy.impl(constants.%b) { -// CHECK:STDOUT: %b => constants.%b -// CHECK:STDOUT: %D => constants.%D.126b2d.2 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.d00 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @D.as.Destroy.impl.Op(constants.%b) { -// CHECK:STDOUT: %b => constants.%b -// CHECK:STDOUT: %D => constants.%D.126b2d.2 -// CHECK:STDOUT: %ptr => constants.%ptr.779 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.bf6 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/todo_access_modifiers.carbon b/toolchain/check/testdata/class/todo_access_modifiers.carbon index c8fb4ed4c48a..b2a034bc103b 100644 --- a/toolchain/check/testdata/class/todo_access_modifiers.carbon +++ b/toolchain/check/testdata/class/todo_access_modifiers.carbon @@ -36,13 +36,6 @@ class Access { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Access.elem: type = unbound_element_type %Access, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Access.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.2af: type = ptr_type %Access [concrete] -// CHECK:STDOUT: %pattern_type.010: type = pattern_type %ptr.2af [concrete] -// CHECK:STDOUT: %Access.as.Destroy.impl.Op.type: type = fn_type @Access.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Access.as.Destroy.impl.Op: %Access.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.k.l: type = struct_type {.k: %i32, .l: %i32} [concrete] // CHECK:STDOUT: %complete_type.48a: = complete_type_witness %struct_type.k.l [concrete] // CHECK:STDOUT: } @@ -50,12 +43,10 @@ class Access { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -67,22 +58,6 @@ class Access { // CHECK:STDOUT: %Access.decl: type = class_decl @Access [concrete = constants.%Access] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Access.as.Destroy.impl: @Access.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Access.as.Destroy.impl.Op.decl: %Access.as.Destroy.impl.Op.type = fn_decl @Access.as.Destroy.impl.Op [concrete = constants.%Access.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.010 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.010 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.2af = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Access [concrete = constants.%Access] -// CHECK:STDOUT: %self: %ptr.2af = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Access.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Access.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Access { // CHECK:STDOUT: %Access.F.decl: %Access.F.type = fn_decl @Access.F [concrete = constants.%Access.F] {} {} // CHECK:STDOUT: %Access.G.decl: %Access.G.type = fn_decl @Access.G [concrete = constants.%Access.G] {} {} @@ -92,10 +67,6 @@ class Access { // CHECK:STDOUT: %int_32.loc23: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc23: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc23: %Access.elem = field_decl l, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Access [concrete = constants.%Access] -// CHECK:STDOUT: impl_decl @Access.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Access.as.Destroy.impl.%Access.as.Destroy.impl.Op.decl), @Access.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.k.l [concrete = constants.%complete_type.48a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -111,5 +82,3 @@ class Access { // CHECK:STDOUT: // CHECK:STDOUT: fn @Access.G(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Access.as.Destroy.impl.Op(%self.param: %ptr.2af) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/virtual_modifiers.carbon b/toolchain/check/testdata/class/virtual_modifiers.carbon index b0e0ef3c9396..378d23710c1b 100644 --- a/toolchain/check/testdata/class/virtual_modifiers.carbon +++ b/toolchain/check/testdata/class/virtual_modifiers.carbon @@ -523,16 +523,9 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %Base.H.type: type = fn_type @Base.H [concrete] // CHECK:STDOUT: %Base.H: %Base.H.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] -// CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] -// CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type [concrete] +// CHECK:STDOUT: %Base.vtable_decl: ref %ptr = vtable_decl @Base.vtable [concrete] +// CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] // CHECK:STDOUT: %pattern_type.41e: type = pattern_type %Abstract [concrete] @@ -540,21 +533,14 @@ class T2(G2:! type) { // CHECK:STDOUT: %Abstract.J: %Abstract.J.type = struct_value () [concrete] // CHECK:STDOUT: %Abstract.K.type: type = fn_type @Abstract.K [concrete] // CHECK:STDOUT: %Abstract.K: %Abstract.K.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d51: = impl_witness @Abstract.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Abstract [concrete] -// CHECK:STDOUT: %pattern_type.f31: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.type: type = fn_type @Abstract.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op: %Abstract.as.Destroy.impl.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %Abstract.vtable_decl: ref %ptr.454 = vtable_decl @Abstract.vtable [concrete] +// CHECK:STDOUT: %Abstract.vtable_decl: ref %ptr = vtable_decl @Abstract.vtable [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -568,38 +554,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: @Abstract.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Abstract.as.Destroy.impl.Op.decl: %Abstract.as.Destroy.impl.Op.type = fn_decl @Abstract.as.Destroy.impl.Op [concrete = constants.%Abstract.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f31 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f31 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Abstract.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Abstract.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.bcc = binding_pattern self [concrete] @@ -609,11 +563,7 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] // CHECK:STDOUT: %self: %Base = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] -// CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] +// CHECK:STDOUT: %vtable_decl: ref %ptr = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: vtable_decl = %vtable_decl @@ -640,11 +590,7 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] // CHECK:STDOUT: %self: %Abstract = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] -// CHECK:STDOUT: impl_decl @Abstract.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Abstract.as.Destroy.impl.%Abstract.as.Destroy.impl.Op.decl), @Abstract.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d51] -// CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Abstract.vtable [concrete = constants.%Abstract.vtable_decl] +// CHECK:STDOUT: %vtable_decl: ref %ptr = vtable_decl @Abstract.vtable [concrete = constants.%Abstract.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: vtable_decl = %vtable_decl @@ -666,14 +612,10 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Base.H(%self.param: %Base); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: abstract fn @Abstract.J(%self.param: %Abstract); // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Abstract.K(%self.param: %Abstract); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Abstract.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- override_import.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -687,13 +629,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.H.type: type = fn_type @Derived.H [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Derived.H: %Derived.H.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Base.H.type: type = fn_type @Base.H [concrete] // CHECK:STDOUT: %Base.H: %Base.H.type = struct_value () [concrete] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] @@ -707,6 +642,13 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.vtable_ptr: ref %ptr.454 = vtable_ptr @Derived.vtable [concrete] // CHECK:STDOUT: %Base.val: %Base = struct_value (%Derived.vtable_ptr) [concrete] // CHECK:STDOUT: %Derived.val: %Derived = struct_value (%Base.val) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Derived, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.b9f: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.834: %AggregateT.as_type.as.Destroy.impl.Op.type.b9f = struct_value () [concrete] +// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.834, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -740,22 +682,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Modifiers.ref: = name_ref Modifiers, imports.%Modifiers [concrete = imports.%Modifiers] // CHECK:STDOUT: %Base.ref: type = name_ref Base, imports.%Modifiers.Base [concrete = constants.%Base] @@ -768,10 +694,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] // CHECK:STDOUT: %self: %Derived = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.96c [concrete = constants.%complete_type.0e2] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -804,8 +726,6 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: override fn @Derived.H(%self.param: %Derived); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Base.H [from "modifiers.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: fn @Use() { @@ -824,13 +744,17 @@ class T2(G2:! type) { // CHECK:STDOUT: %.loc12_30.4: init %Base = class_init (%.loc12_30.3), %.loc12_31.2 [concrete = constants.%Base.val] // CHECK:STDOUT: %.loc12_31.3: init %Base = converted %.loc12_30.1, %.loc12_30.4 [concrete = constants.%Base.val] // CHECK:STDOUT: %.loc12_31.4: init %Derived = class_init (%.loc12_31.3), %d.var [concrete = constants.%Derived.val] -// CHECK:STDOUT: %.loc12_3: init %Derived = converted %.loc12_31.1, %.loc12_31.4 [concrete = constants.%Derived.val] -// CHECK:STDOUT: assign %d.var, %.loc12_3 +// CHECK:STDOUT: %.loc12_3.1: init %Derived = converted %.loc12_31.1, %.loc12_31.4 [concrete = constants.%Derived.val] +// CHECK:STDOUT: assign %d.var, %.loc12_3.1 // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] // CHECK:STDOUT: %d: ref %Derived = bind_name d, %d.var -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%Derived.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Derived, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc12_3.2: %type_where = converted constants.%Derived, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %d.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.834 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.834, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %d.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.404 = addr_of %d.var -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Derived.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -846,13 +770,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] // CHECK:STDOUT: %complete_type.513: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Base.H.type: type = fn_type @Base.H [concrete] // CHECK:STDOUT: %Base.H: %Base.H.type = struct_value () [concrete] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] @@ -863,7 +780,6 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -876,7 +792,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Modifiers.import_ref.05e: = import_ref Modifiers//default, loc6_1, loaded [concrete = constants.%complete_type.513] // CHECK:STDOUT: %Modifiers.import_ref.1f3 = import_ref Modifiers//default, inst18 [no loc], unloaded // CHECK:STDOUT: %Modifiers.import_ref.2cc = import_ref Modifiers//default, loc5_29, unloaded -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -890,22 +805,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Derived.F.decl: %Derived.F.type = fn_decl @Derived.F [concrete = constants.%Derived.F] { // CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self [concrete] @@ -918,10 +817,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Modifiers.ref: = name_ref Modifiers, imports.%Modifiers [concrete = imports.%Modifiers] // 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: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base [concrete = constants.%complete_type.0e2] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -955,8 +850,6 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Derived.F(%self.param: %Derived); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Base.H [from "modifiers.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: --- init.carbon @@ -968,7 +861,7 @@ class T2(G2:! type) { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.vptr [concrete] +// CHECK:STDOUT: %complete_type.513: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %pattern_type.80f: type = pattern_type %Base [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %Base.H.type: type = fn_type @Base.H [concrete] @@ -977,11 +870,12 @@ class T2(G2:! type) { // CHECK:STDOUT: %Base.vtable_ptr: ref %ptr.454 = vtable_ptr @Base.vtable [concrete] // CHECK:STDOUT: %Base.val: %Base = struct_value (%Base.vtable_ptr) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.fac: = impl_witness imports.%Destroy.impl_witness_table.be5 [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Base, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.c02: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.97a: %AggregateT.as_type.as.Destroy.impl.Op.type.c02 = struct_value () [concrete] // CHECK:STDOUT: %ptr.f03: type = ptr_type %Base [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.97a, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -996,23 +890,10 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Modifiers.Base: type = import_ref Modifiers//default, Base, loaded [concrete = constants.%Base] // CHECK:STDOUT: %Modifiers.import_ref.97a: ref %ptr.454 = import_ref Modifiers//default, loc6_1, loaded [concrete = constants.%Base.vtable_decl] -// CHECK:STDOUT: %Modifiers.import_ref.05ec96.1: = import_ref Modifiers//default, loc6_1, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Modifiers.import_ref.05e: = import_ref Modifiers//default, loc6_1, loaded [concrete = constants.%complete_type.513] // CHECK:STDOUT: %Modifiers.import_ref.1f3 = import_ref Modifiers//default, inst18 [no loc], unloaded // CHECK:STDOUT: %Modifiers.import_ref.2cc = import_ref Modifiers//default, loc5_29, unloaded // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Modifiers.import_ref.b6c: = import_ref Modifiers//default, loc4_17, loaded [concrete = constants.%Destroy.impl_witness.fac] -// CHECK:STDOUT: %Modifiers.import_ref.87c: type = import_ref Modifiers//default, loc4_17, loaded [concrete = constants.%Base] -// CHECK:STDOUT: %Modifiers.import_ref.e45cb5.1: type = import_ref Modifiers//default, inst31 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Modifiers.import_ref.8b0 = import_ref Modifiers//default, loc8_25, unloaded -// CHECK:STDOUT: %Modifiers.import_ref.30bb79.2 = import_ref Modifiers//default, loc12_1, unloaded -// CHECK:STDOUT: %Modifiers.import_ref.05ec96.2: = import_ref Modifiers//default, loc12_1, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Modifiers.import_ref.ee1 = import_ref Modifiers//default, inst75 [no loc], unloaded -// CHECK:STDOUT: %Modifiers.import_ref.bf4 = import_ref Modifiers//default, loc9_30, unloaded -// CHECK:STDOUT: %Modifiers.import_ref.b87 = import_ref Modifiers//default, loc11_29, unloaded -// CHECK:STDOUT: %Modifiers.import_ref.462: type = import_ref Modifiers//default, loc8_25, loaded [concrete = constants.%Abstract] -// CHECK:STDOUT: %Modifiers.import_ref.e45cb5.2: type = import_ref Modifiers//default, inst31 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Modifiers.import_ref.fea: %Base.as.Destroy.impl.Op.type = import_ref Modifiers//default, loc4_17, loaded [concrete = constants.%Base.as.Destroy.impl.Op] -// CHECK:STDOUT: %Destroy.impl_witness_table.be5 = impl_witness_table (%Modifiers.import_ref.fea), @Base.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1026,18 +907,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: imports.%Modifiers.import_ref.87c as imports.%Modifiers.import_ref.e45cb5.1 [from "modifiers.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Modifiers.import_ref.b6c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Abstract.as.Destroy.impl: imports.%Modifiers.import_ref.462 as imports.%Modifiers.import_ref.e45cb5.2 [from "modifiers.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Modifiers.import_ref.8b0 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base [from "modifiers.carbon"] { -// CHECK:STDOUT: complete_type_witness = imports.%Modifiers.import_ref.05ec96.1 +// CHECK:STDOUT: complete_type_witness = imports.%Modifiers.import_ref.05e // CHECK:STDOUT: vtable_decl = imports.%Modifiers.import_ref.97a // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -1045,16 +916,6 @@ class T2(G2:! type) { // CHECK:STDOUT: .H = imports.%Modifiers.import_ref.2cc // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Abstract [from "modifiers.carbon"] { -// CHECK:STDOUT: complete_type_witness = imports.%Modifiers.import_ref.05ec96.2 -// CHECK:STDOUT: vtable_decl = imports.%Modifiers.import_ref.30bb79.2 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Modifiers.import_ref.ee1 -// CHECK:STDOUT: .J = imports.%Modifiers.import_ref.bf4 -// CHECK:STDOUT: .K = imports.%Modifiers.import_ref.b87 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: vtable @Base.vtable { // CHECK:STDOUT: constants.%Base.H // CHECK:STDOUT: } @@ -1071,23 +932,25 @@ class T2(G2:! type) { // CHECK:STDOUT: %Base.vtable_ptr: ref %ptr.454 = vtable_ptr @Base.vtable [concrete = constants.%Base.vtable_ptr] // CHECK:STDOUT: %.loc7_28.3: init %ptr.454 = initialize_from %Base.vtable_ptr to %.loc7_28.2 [concrete = constants.%Base.vtable_ptr] // CHECK:STDOUT: %.loc7_28.4: init %Base = class_init (%.loc7_28.3), %v.var [concrete = constants.%Base.val] -// CHECK:STDOUT: %.loc7_3: init %Base = converted %.loc7_28.1, %.loc7_28.4 [concrete = constants.%Base.val] -// CHECK:STDOUT: assign %v.var, %.loc7_3 +// CHECK:STDOUT: %.loc7_3.1: init %Base = converted %.loc7_28.1, %.loc7_28.4 [concrete = constants.%Base.val] +// CHECK:STDOUT: assign %v.var, %.loc7_3.1 // CHECK:STDOUT: %.loc7_19: type = splice_block %Base.ref [concrete = constants.%Base] { // CHECK:STDOUT: %Modifiers.ref: = name_ref Modifiers, imports.%Modifiers [concrete = imports.%Modifiers] // CHECK:STDOUT: %Base.ref: type = name_ref Base, imports.%Modifiers.Base [concrete = constants.%Base] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %Base = bind_name v, %v.var -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%Base.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Base, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc7_3.2: %type_where = converted constants.%Base, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.97a +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.97a, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.f03 = addr_of %v.var -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Base.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Base.H [from "modifiers.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op = "no_op" [from "modifiers.carbon"]; -// CHECK:STDOUT: // CHECK:STDOUT: --- impl_abstract.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1095,13 +958,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.ddb: type = pattern_type %A1 [concrete] // CHECK:STDOUT: %A1.F.type: type = fn_type @A1.F [concrete] // CHECK:STDOUT: %A1.F: %A1.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ba6: = impl_witness @A1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.678: type = ptr_type %A1 [concrete] -// CHECK:STDOUT: %pattern_type.d72: type = pattern_type %ptr.678 [concrete] -// CHECK:STDOUT: %A1.as.Destroy.impl.Op.type: type = fn_type @A1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A1.as.Destroy.impl.Op: %A1.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %A1.vtable_decl: ref %ptr.454 = vtable_decl @A1.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] @@ -1111,11 +967,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.b21: type = pattern_type %A2 [concrete] // CHECK:STDOUT: %A2.F.type: type = fn_type @A2.F [concrete] // CHECK:STDOUT: %A2.F: %A2.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.879: = impl_witness @A2.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.590: type = ptr_type %A2 [concrete] -// CHECK:STDOUT: %pattern_type.2c5: type = pattern_type %ptr.590 [concrete] -// CHECK:STDOUT: %A2.as.Destroy.impl.Op.type: type = fn_type @A2.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A2.as.Destroy.impl.Op: %A2.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %A2.vtable_decl: ref %ptr.454 = vtable_decl @A2.vtable [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %A1} [concrete] // CHECK:STDOUT: %complete_type.a6f: = complete_type_witness %struct_type.base [concrete] @@ -1123,11 +974,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1141,38 +990,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %A2.decl: type = class_decl @A2 [concrete = constants.%A2] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A1.as.Destroy.impl: @A1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A1.as.Destroy.impl.Op.decl: %A1.as.Destroy.impl.Op.type = fn_decl @A1.as.Destroy.impl.Op [concrete = constants.%A1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.d72 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.d72 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.678 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A1 [concrete = constants.%A1] -// CHECK:STDOUT: %self: %ptr.678 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @A2.as.Destroy.impl: @A2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A2.as.Destroy.impl.Op.decl: %A2.as.Destroy.impl.Op.type = fn_decl @A2.as.Destroy.impl.Op [concrete = constants.%A2.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.2c5 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.2c5 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.590 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A2 [concrete = constants.%A2] -// CHECK:STDOUT: %self: %ptr.590 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A1 { // CHECK:STDOUT: %A1.F.decl: %A1.F.type = fn_decl @A1.F [concrete = constants.%A1.F] { // CHECK:STDOUT: %self.patt: %pattern_type.ddb = binding_pattern self [concrete] @@ -1182,10 +999,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A1 [concrete = constants.%A1] // CHECK:STDOUT: %self: %A1 = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A1 [concrete = constants.%A1] -// CHECK:STDOUT: impl_decl @A1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A1.as.Destroy.impl.%A1.as.Destroy.impl.Op.decl), @A1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ba6] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @A1.vtable [concrete = constants.%A1.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -1207,10 +1020,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A2 [concrete = constants.%A2] // CHECK:STDOUT: %self: %A2 = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A2 [concrete = constants.%A2] -// CHECK:STDOUT: impl_decl @A2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A2.as.Destroy.impl.%A2.as.Destroy.impl.Op.decl), @A2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.879] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @A2.vtable [concrete = constants.%A2.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base [concrete = constants.%complete_type.a6f] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -1234,12 +1043,8 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @A1.F(%self.param: %A1); // CHECK:STDOUT: -// CHECK:STDOUT: fn @A1.as.Destroy.impl.Op(%self.param: %ptr.678) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: override fn @A2.F(%self.param: %A2); // CHECK:STDOUT: -// CHECK:STDOUT: fn @A2.as.Destroy.impl.Op(%self.param: %ptr.590) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- impl_base.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1248,13 +1053,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %B1.F.type: type = fn_type @B1.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %B1.F: %B1.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d07: = impl_witness @B1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.890: type = ptr_type %B1 [concrete] -// CHECK:STDOUT: %pattern_type.b78: type = pattern_type %ptr.890 [concrete] -// CHECK:STDOUT: %B1.as.Destroy.impl.Op.type: type = fn_type @B1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B1.as.Destroy.impl.Op: %B1.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %B1.vtable_decl: ref %ptr.454 = vtable_decl @B1.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] @@ -1264,11 +1062,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.b19: type = pattern_type %B2 [concrete] // CHECK:STDOUT: %B2.F.type: type = fn_type @B2.F [concrete] // CHECK:STDOUT: %B2.F: %B2.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.0d8: = impl_witness @B2.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.afe: type = ptr_type %B2 [concrete] -// CHECK:STDOUT: %pattern_type.98e: type = pattern_type %ptr.afe [concrete] -// CHECK:STDOUT: %B2.as.Destroy.impl.Op.type: type = fn_type @B2.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B2.as.Destroy.impl.Op: %B2.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %B2.vtable_decl: ref %ptr.454 = vtable_decl @B2.vtable [concrete] // CHECK:STDOUT: %struct_type.base.508: type = struct_type {.base: %B1} [concrete] // CHECK:STDOUT: %complete_type.5ac: = complete_type_witness %struct_type.base.508 [concrete] @@ -1277,11 +1070,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %C.vtable_decl: ref %ptr.454 = vtable_decl @C.vtable [concrete] // CHECK:STDOUT: %struct_type.base.421: type = struct_type {.base: %B2} [concrete] // CHECK:STDOUT: %complete_type.066: = complete_type_witness %struct_type.base.421 [concrete] @@ -1299,6 +1087,23 @@ class T2(G2:! type) { // CHECK:STDOUT: %B1.val.b9d: %B1 = struct_value (%C.vtable_ptr) [concrete] // CHECK:STDOUT: %B2.val.426: %B2 = struct_value (%B1.val.b9d) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%B2.val.426) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.003: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.be8) [concrete] +// CHECK:STDOUT: %facet_value.5f9: %type_where = facet_value %B2, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.fc2: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.5f9) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.159: %AggregateT.as_type.as.Destroy.impl.Op.type.fc2 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.afe: type = ptr_type %B2 [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.6a8: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.159, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.5f9) [concrete] +// CHECK:STDOUT: %facet_value.bf5: %type_where = facet_value %B1, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.68e: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.bf5) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.3d7: %AggregateT.as_type.as.Destroy.impl.Op.type.68e = struct_value () [concrete] +// CHECK:STDOUT: %ptr.890: type = ptr_type %B1 [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.7ca: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.3d7, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.bf5) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1325,54 +1130,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @B1.as.Destroy.impl: @B1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B1.as.Destroy.impl.Op.decl: %B1.as.Destroy.impl.Op.type = fn_decl @B1.as.Destroy.impl.Op [concrete = constants.%B1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.b78 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.b78 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.890 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B1 [concrete = constants.%B1] -// CHECK:STDOUT: %self: %ptr.890 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B2.as.Destroy.impl: @B2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B2.as.Destroy.impl.Op.decl: %B2.as.Destroy.impl.Op.type = fn_decl @B2.as.Destroy.impl.Op [concrete = constants.%B2.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.98e = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.98e = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.afe = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B2 [concrete = constants.%B2] -// CHECK:STDOUT: %self: %ptr.afe = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @B1 { // CHECK:STDOUT: %B1.F.decl: %B1.F.type = fn_decl @B1.F [concrete = constants.%B1.F] { // CHECK:STDOUT: %self.patt: %pattern_type.e47 = binding_pattern self [concrete] @@ -1382,10 +1139,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B1 [concrete = constants.%B1] // CHECK:STDOUT: %self: %B1 = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B1 [concrete = constants.%B1] -// CHECK:STDOUT: impl_decl @B1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B1.as.Destroy.impl.%B1.as.Destroy.impl.Op.decl), @B1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d07] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @B1.vtable [concrete = constants.%B1.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -1407,10 +1160,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B2 [concrete = constants.%B2] // CHECK:STDOUT: %self: %B2 = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B2 [concrete = constants.%B2] -// CHECK:STDOUT: impl_decl @B2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B2.as.Destroy.impl.%B2.as.Destroy.impl.Op.decl), @B2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.0d8] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @B2.vtable [concrete = constants.%B2.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.508 [concrete = constants.%complete_type.5ac] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -1435,10 +1184,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] // CHECK:STDOUT: %self: %C = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @C.vtable [concrete = constants.%C.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.421 [concrete = constants.%complete_type.066] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -1466,16 +1211,10 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @B1.F(%self.param: %B1); // CHECK:STDOUT: -// CHECK:STDOUT: fn @B1.as.Destroy.impl.Op(%self.param: %ptr.890) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: override fn @B2.F(%self.param: %B2); // CHECK:STDOUT: -// CHECK:STDOUT: fn @B2.as.Destroy.impl.Op(%self.param: %ptr.afe) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: override fn @C.F(%self.param: %C); // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -1488,8 +1227,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %B1.vtable_ptr: ref %ptr.454 = vtable_ptr @B1.vtable [concrete = constants.%B1.vtable_ptr] // CHECK:STDOUT: %.loc19_17.3: init %ptr.454 = initialize_from %B1.vtable_ptr to %.loc19_17.2 [concrete = constants.%B1.vtable_ptr] // CHECK:STDOUT: %.loc19_17.4: init %B1 = class_init (%.loc19_17.3), %b1.var [concrete = constants.%B1.val.267] -// CHECK:STDOUT: %.loc19_3: init %B1 = converted %.loc19_17.1, %.loc19_17.4 [concrete = constants.%B1.val.267] -// CHECK:STDOUT: assign %b1.var, %.loc19_3 +// CHECK:STDOUT: %.loc19_3.1: init %B1 = converted %.loc19_17.1, %.loc19_17.4 [concrete = constants.%B1.val.267] +// CHECK:STDOUT: assign %b1.var, %.loc19_3.1 // CHECK:STDOUT: %B1.ref: type = name_ref B1, file.%B1.decl [concrete = constants.%B1] // CHECK:STDOUT: %b1: ref %B1 = bind_name b1, %b1.var // CHECK:STDOUT: name_binding_decl { @@ -1506,8 +1245,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %.loc20_26.4: init %B1 = class_init (%.loc20_26.3), %.loc20_27.2 [concrete = constants.%B1.val.d2f] // CHECK:STDOUT: %.loc20_27.3: init %B1 = converted %.loc20_26.1, %.loc20_26.4 [concrete = constants.%B1.val.d2f] // CHECK:STDOUT: %.loc20_27.4: init %B2 = class_init (%.loc20_27.3), %b2.var [concrete = constants.%B2.val.e9e] -// CHECK:STDOUT: %.loc20_3: init %B2 = converted %.loc20_27.1, %.loc20_27.4 [concrete = constants.%B2.val.e9e] -// CHECK:STDOUT: assign %b2.var, %.loc20_3 +// CHECK:STDOUT: %.loc20_3.1: init %B2 = converted %.loc20_27.1, %.loc20_27.4 [concrete = constants.%B2.val.e9e] +// CHECK:STDOUT: assign %b2.var, %.loc20_3.1 // CHECK:STDOUT: %B2.ref: type = name_ref B2, file.%B2.decl [concrete = constants.%B2] // CHECK:STDOUT: %b2: ref %B2 = bind_name b2, %b2.var // CHECK:STDOUT: name_binding_decl { @@ -1528,19 +1267,31 @@ class T2(G2:! type) { // CHECK:STDOUT: %.loc21_34.4: init %B2 = class_init (%.loc21_34.3), %.loc21_35.2 [concrete = constants.%B2.val.426] // CHECK:STDOUT: %.loc21_35.3: init %B2 = converted %.loc21_34.1, %.loc21_34.4 [concrete = constants.%B2.val.426] // CHECK:STDOUT: %.loc21_35.4: init %C = class_init (%.loc21_35.3), %c.var [concrete = constants.%C.val] -// CHECK:STDOUT: %.loc21_3: init %C = converted %.loc21_35.1, %.loc21_35.4 [concrete = constants.%C.val] -// CHECK:STDOUT: assign %c.var, %.loc21_3 +// CHECK:STDOUT: %.loc21_3.1: init %C = converted %.loc21_35.1, %.loc21_35.4 [concrete = constants.%C.val] +// CHECK:STDOUT: assign %c.var, %.loc21_3.1 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc21: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc21_3.2: %type_where = converted constants.%C, %facet_value.loc21 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc21: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.be8) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.003] +// CHECK:STDOUT: %bound_method.loc21: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc21: %ptr.019 = addr_of %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc21) -// CHECK:STDOUT: %B2.as.Destroy.impl.Op.bound: = bound_method %b2.var, constants.%B2.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc21: init %empty_tuple.type = call %bound_method.loc21(%addr.loc21) +// CHECK:STDOUT: %facet_value.loc20: %type_where = facet_value constants.%B2, () [concrete = constants.%facet_value.5f9] +// CHECK:STDOUT: %.loc20_3.2: %type_where = converted constants.%B2, %facet_value.loc20 [concrete = constants.%facet_value.5f9] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc20: = bound_method %b2.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.159 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.159, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.5f9) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.6a8] +// CHECK:STDOUT: %bound_method.loc20: = bound_method %b2.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc20: %ptr.afe = addr_of %b2.var -// CHECK:STDOUT: %B2.as.Destroy.impl.Op.call: init %empty_tuple.type = call %B2.as.Destroy.impl.Op.bound(%addr.loc20) -// CHECK:STDOUT: %B1.as.Destroy.impl.Op.bound: = bound_method %b1.var, constants.%B1.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc20: init %empty_tuple.type = call %bound_method.loc20(%addr.loc20) +// CHECK:STDOUT: %facet_value.loc19: %type_where = facet_value constants.%B1, () [concrete = constants.%facet_value.bf5] +// CHECK:STDOUT: %.loc19_3.2: %type_where = converted constants.%B1, %facet_value.loc19 [concrete = constants.%facet_value.bf5] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc19: = bound_method %b1.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.3d7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.3d7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.bf5) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.7ca] +// CHECK:STDOUT: %bound_method.loc19: = bound_method %b1.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc19: %ptr.890 = addr_of %b1.var -// CHECK:STDOUT: %B1.as.Destroy.impl.Op.call: init %empty_tuple.type = call %B1.as.Destroy.impl.Op.bound(%addr.loc19) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc19: init %empty_tuple.type = call %bound_method.loc19(%addr.loc19) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1548,27 +1299,18 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1580,35 +1322,15 @@ class T2(G2:! type) { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] // CHECK:STDOUT: %self: %C = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1619,8 +1341,6 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: override fn @C.F(%self.param: %C); // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- init_members.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1635,13 +1355,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F [concrete] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr.m1.m2: type = struct_type {.: %ptr.454, .m1: %i32, .m2: %i32} [concrete] @@ -1688,29 +1401,37 @@ class T2(G2:! type) { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5bb: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0 [concrete] // CHECK:STDOUT: %bound_method.9cd: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_4.940: %i32 = int_value 4 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.361: %type_where = facet_value %Base, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.473: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.361) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.12d: %AggregateT.as_type.as.Destroy.impl.Op.type.473 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.7f2: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.12d, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.361) [concrete] +// CHECK:STDOUT: %facet_value.d23: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d23) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d23) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -1724,22 +1445,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1755,10 +1460,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] // CHECK:STDOUT: %self: %Base = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr.m1.m2 [concrete = constants.%complete_type.cf7] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -1777,8 +1478,6 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Base.F(%self.param: %Base); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -1792,8 +1491,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %specific_fn.loc12: = specific_function %impl.elem0.loc12, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc12_3.2: = bound_method %int_3.loc12, %specific_fn.loc12 [concrete = constants.%bound_method.f36] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc12: init %i32 = call %bound_method.loc12_3.2(%int_3.loc12) [concrete = constants.%int_3.822] -// CHECK:STDOUT: %.loc12_3: init %i32 = converted %int_3.loc12, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc12 [concrete = constants.%int_3.822] -// CHECK:STDOUT: assign %i.var, %.loc12_3 +// CHECK:STDOUT: %.loc12_3.1: init %i32 = converted %int_3.loc12, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc12 [concrete = constants.%int_3.822] +// CHECK:STDOUT: assign %i.var, %.loc12_3.1 // CHECK:STDOUT: %.loc12_10: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1827,8 +1526,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %.loc13_35.6: ref %i32 = class_element_access %b1.var, element1 // CHECK:STDOUT: %.loc13_35.7: init %i32 = initialize_from %Int.as.Copy.impl.Op.call.loc13_25 to %.loc13_35.6 // CHECK:STDOUT: %.loc13_35.8: init %Base = class_init (%.loc13_35.3, %.loc13_35.5, %.loc13_35.7), %b1.var -// CHECK:STDOUT: %.loc13_3: init %Base = converted %.loc13_35.1, %.loc13_35.8 -// CHECK:STDOUT: assign %b1.var, %.loc13_3 +// CHECK:STDOUT: %.loc13_3.1: init %Base = converted %.loc13_35.1, %.loc13_35.8 +// CHECK:STDOUT: assign %b1.var, %.loc13_3.1 // CHECK:STDOUT: %Base.ref.loc13: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %b1: ref %Base = bind_name b1, %b1.var // CHECK:STDOUT: name_binding_decl { @@ -1859,8 +1558,8 @@ class T2(G2:! type) { // CHECK:STDOUT: %.loc14_35.8: ref %i32 = class_element_access %b2.var, element1 // CHECK:STDOUT: %.loc14_35.9: init %i32 = initialize_from %.loc14_35.7 to %.loc14_35.8 [concrete = constants.%int_3.822] // CHECK:STDOUT: %.loc14_35.10: init %Base = class_init (%.loc14_35.3, %.loc14_35.6, %.loc14_35.9), %b2.var [concrete = constants.%Base.val] -// CHECK:STDOUT: %.loc14_3: init %Base = converted %.loc14_35.1, %.loc14_35.10 [concrete = constants.%Base.val] -// CHECK:STDOUT: assign %b2.var, %.loc14_3 +// CHECK:STDOUT: %.loc14_3.1: init %Base = converted %.loc14_35.1, %.loc14_35.10 [concrete = constants.%Base.val] +// CHECK:STDOUT: assign %b2.var, %.loc14_3.1 // CHECK:STDOUT: %Base.ref.loc14: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %b2: ref %Base = bind_name b2, %b2.var // CHECK:STDOUT: %b1.ref: ref %Base = name_ref b1, %b1 @@ -1874,17 +1573,27 @@ class T2(G2:! type) { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc16: init %i32 = call %bound_method.loc16_9.2(%int_4) [concrete = constants.%int_4.940] // CHECK:STDOUT: %.loc16_9: init %i32 = converted %int_4, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc16 [concrete = constants.%int_4.940] // CHECK:STDOUT: assign %.loc16_5, %.loc16_9 -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.bound.loc14: = bound_method %b2.var, constants.%Base.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc14: %type_where = facet_value constants.%Base, () [concrete = constants.%facet_value.361] +// CHECK:STDOUT: %.loc14_3.2: %type_where = converted constants.%Base, %facet_value.loc14 [concrete = constants.%facet_value.361] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc14: = bound_method %b2.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.12d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.12d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.361) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.7f2] +// CHECK:STDOUT: %bound_method.loc14_3: = bound_method %b2.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc14: %ptr.11f = addr_of %b2.var -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.call.loc14: init %empty_tuple.type = call %Base.as.Destroy.impl.Op.bound.loc14(%addr.loc14) -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.bound.loc13: = bound_method %b1.var, constants.%Base.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc14: init %empty_tuple.type = call %bound_method.loc14_3(%addr.loc14) +// CHECK:STDOUT: %facet_value.loc13: %type_where = facet_value constants.%Base, () [concrete = constants.%facet_value.361] +// CHECK:STDOUT: %.loc13_3.2: %type_where = converted constants.%Base, %facet_value.loc13 [concrete = constants.%facet_value.361] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13: = bound_method %b1.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.12d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.12d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.361) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.7f2] +// CHECK:STDOUT: %bound_method.loc13_3: = bound_method %b1.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc13: %ptr.11f = addr_of %b1.var -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.call.loc13: init %empty_tuple.type = call %Base.as.Destroy.impl.Op.bound.loc13(%addr.loc13) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %i.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc12_3.3: = bound_method %i.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13: init %empty_tuple.type = call %bound_method.loc13_3(%addr.loc13) +// CHECK:STDOUT: %facet_value.loc12: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %.loc12_3.2: %type_where = converted constants.%i32, %facet_value.loc12 [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc12: = bound_method %i.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d23) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0] +// CHECK:STDOUT: %bound_method.loc12_3.3: = bound_method %i.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc12: %ptr.235 = addr_of %i.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc12_3.3(%addr.loc12) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc12: init %empty_tuple.type = call %bound_method.loc12_3.3(%addr.loc12) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1892,25 +1601,13 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = 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: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] -// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %Derived.F.type: type = fn_type @Derived.F [concrete] // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr.base: type = struct_type {.: %ptr.454, .base: %Base} [concrete] @@ -1919,11 +1616,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1937,43 +1632,7 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1985,17 +1644,13 @@ class T2(G2:! type) { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc8: %Derived.elem = base_decl %Base.ref, element1 [concrete] // CHECK:STDOUT: %Derived.F.decl: %Derived.F.type = fn_decl @Derived.F [concrete = constants.%Derived.F] { -// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 [concrete] // 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 = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr.base [concrete = constants.%complete_type.336] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2011,12 +1666,8 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: vtable @Derived.vtable {} // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: override fn @Derived.F(%self.param: %Derived); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- abstract_impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2024,24 +1675,12 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.27c: type = pattern_type %AbstractBase [concrete] // CHECK:STDOUT: %AbstractBase.F.type: type = fn_type @AbstractBase.F [concrete] // CHECK:STDOUT: %AbstractBase.F: %AbstractBase.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.3ce: = impl_witness @AbstractBase.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e86: type = ptr_type %AbstractBase [concrete] -// CHECK:STDOUT: %pattern_type.35f: type = pattern_type %ptr.e86 [concrete] -// CHECK:STDOUT: %AbstractBase.as.Destroy.impl.Op.type: type = fn_type @AbstractBase.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AbstractBase.as.Destroy.impl.Op: %AbstractBase.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %AbstractBase.vtable_decl: ref %ptr.454 = vtable_decl @AbstractBase.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] // CHECK:STDOUT: %complete_type.513: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %AbstractIntermediate: type = class_type @AbstractIntermediate [concrete] // CHECK:STDOUT: %AbstractIntermediate.elem: type = unbound_element_type %AbstractIntermediate, %AbstractBase [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.40b: = impl_witness @AbstractIntermediate.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.fd8: type = ptr_type %AbstractIntermediate [concrete] -// CHECK:STDOUT: %pattern_type.28b: type = pattern_type %ptr.fd8 [concrete] -// CHECK:STDOUT: %AbstractIntermediate.as.Destroy.impl.Op.type: type = fn_type @AbstractIntermediate.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %AbstractIntermediate.as.Destroy.impl.Op: %AbstractIntermediate.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %AbstractIntermediate.vtable_decl: ref %ptr.454 = vtable_decl @AbstractIntermediate.vtable [concrete] // CHECK:STDOUT: %struct_type.base.efd: type = struct_type {.base: %AbstractBase} [concrete] // CHECK:STDOUT: %complete_type.2d3: = complete_type_witness %struct_type.base.efd [concrete] @@ -2050,11 +1689,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %Derived.F.type: type = fn_type @Derived.F [concrete] // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.base.da5: type = struct_type {.base: %AbstractIntermediate} [concrete] // CHECK:STDOUT: %complete_type.f8c: = complete_type_witness %struct_type.base.da5 [concrete] @@ -2062,11 +1696,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2082,54 +1714,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @AbstractBase.as.Destroy.impl: @AbstractBase.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AbstractBase.as.Destroy.impl.Op.decl: %AbstractBase.as.Destroy.impl.Op.type = fn_decl @AbstractBase.as.Destroy.impl.Op [concrete = constants.%AbstractBase.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.35f = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.35f = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e86 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AbstractBase [concrete = constants.%AbstractBase] -// CHECK:STDOUT: %self: %ptr.e86 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AbstractBase.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AbstractBase.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @AbstractIntermediate.as.Destroy.impl: @AbstractIntermediate.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AbstractIntermediate.as.Destroy.impl.Op.decl: %AbstractIntermediate.as.Destroy.impl.Op.type = fn_decl @AbstractIntermediate.as.Destroy.impl.Op [concrete = constants.%AbstractIntermediate.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.28b = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.28b = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.fd8 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AbstractIntermediate [concrete = constants.%AbstractIntermediate] -// CHECK:STDOUT: %self: %ptr.fd8 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AbstractIntermediate.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AbstractIntermediate.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @AbstractBase { // CHECK:STDOUT: %AbstractBase.F.decl: %AbstractBase.F.type = fn_decl @AbstractBase.F [concrete = constants.%AbstractBase.F] { // CHECK:STDOUT: %self.patt: %pattern_type.27c = binding_pattern self [concrete] @@ -2139,10 +1723,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AbstractBase [concrete = constants.%AbstractBase] // CHECK:STDOUT: %self: %AbstractBase = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AbstractBase [concrete = constants.%AbstractBase] -// CHECK:STDOUT: impl_decl @AbstractBase.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AbstractBase.as.Destroy.impl.%AbstractBase.as.Destroy.impl.Op.decl), @AbstractBase.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.3ce] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @AbstractBase.vtable [concrete = constants.%AbstractBase.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2156,10 +1736,6 @@ class T2(G2:! type) { // CHECK:STDOUT: class @AbstractIntermediate { // CHECK:STDOUT: %AbstractBase.ref: type = name_ref AbstractBase, file.%AbstractBase.decl [concrete = constants.%AbstractBase] // CHECK:STDOUT: %.loc9: %AbstractIntermediate.elem = base_decl %AbstractBase.ref, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AbstractIntermediate [concrete = constants.%AbstractIntermediate] -// CHECK:STDOUT: impl_decl @AbstractIntermediate.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AbstractIntermediate.as.Destroy.impl.%AbstractIntermediate.as.Destroy.impl.Op.decl), @AbstractIntermediate.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.40b] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @AbstractIntermediate.vtable [concrete = constants.%AbstractIntermediate.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.efd [concrete = constants.%complete_type.2d3] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2183,10 +1759,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] // CHECK:STDOUT: %self: %Derived = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.da5 [concrete = constants.%complete_type.f8c] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2214,14 +1786,8 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: abstract fn @AbstractBase.F(%self.param: %AbstractBase); // CHECK:STDOUT: -// CHECK:STDOUT: fn @AbstractBase.as.Destroy.impl.Op(%self.param: %ptr.e86) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @AbstractIntermediate.as.Destroy.impl.Op(%self.param: %ptr.fd8) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: override fn @Derived.F(%self.param: %Derived); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- virtual_impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2229,24 +1795,12 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.ad4: type = pattern_type %VirtualBase [concrete] // CHECK:STDOUT: %VirtualBase.F.type: type = fn_type @VirtualBase.F [concrete] // CHECK:STDOUT: %VirtualBase.F: %VirtualBase.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.f1b: = impl_witness @VirtualBase.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e57: type = ptr_type %VirtualBase [concrete] -// CHECK:STDOUT: %pattern_type.f17: type = pattern_type %ptr.e57 [concrete] -// CHECK:STDOUT: %VirtualBase.as.Destroy.impl.Op.type: type = fn_type @VirtualBase.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %VirtualBase.as.Destroy.impl.Op: %VirtualBase.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %VirtualBase.vtable_decl: ref %ptr.454 = vtable_decl @VirtualBase.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] // CHECK:STDOUT: %complete_type.513: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %VirtualIntermediate: type = class_type @VirtualIntermediate [concrete] // CHECK:STDOUT: %VirtualIntermediate.elem: type = unbound_element_type %VirtualIntermediate, %VirtualBase [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c3a: = impl_witness @VirtualIntermediate.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.7dc: type = ptr_type %VirtualIntermediate [concrete] -// CHECK:STDOUT: %pattern_type.906: type = pattern_type %ptr.7dc [concrete] -// CHECK:STDOUT: %VirtualIntermediate.as.Destroy.impl.Op.type: type = fn_type @VirtualIntermediate.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %VirtualIntermediate.as.Destroy.impl.Op: %VirtualIntermediate.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %VirtualIntermediate.vtable_decl: ref %ptr.454 = vtable_decl @VirtualIntermediate.vtable [concrete] // CHECK:STDOUT: %struct_type.base.61e: type = struct_type {.base: %VirtualBase} [concrete] // CHECK:STDOUT: %complete_type.f09: = complete_type_witness %struct_type.base.61e [concrete] @@ -2255,11 +1809,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %Derived.F.type: type = fn_type @Derived.F [concrete] // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.base.43c: type = struct_type {.base: %VirtualIntermediate} [concrete] // CHECK:STDOUT: %complete_type.fa6: = complete_type_witness %struct_type.base.43c [concrete] @@ -2267,11 +1816,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2287,54 +1834,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @VirtualBase.as.Destroy.impl: @VirtualBase.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %VirtualBase.as.Destroy.impl.Op.decl: %VirtualBase.as.Destroy.impl.Op.type = fn_decl @VirtualBase.as.Destroy.impl.Op [concrete = constants.%VirtualBase.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f17 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f17 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e57 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%VirtualBase [concrete = constants.%VirtualBase] -// CHECK:STDOUT: %self: %ptr.e57 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %VirtualBase.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @VirtualBase.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @VirtualIntermediate.as.Destroy.impl: @VirtualIntermediate.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %VirtualIntermediate.as.Destroy.impl.Op.decl: %VirtualIntermediate.as.Destroy.impl.Op.type = fn_decl @VirtualIntermediate.as.Destroy.impl.Op [concrete = constants.%VirtualIntermediate.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.906 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.906 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.7dc = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%VirtualIntermediate [concrete = constants.%VirtualIntermediate] -// CHECK:STDOUT: %self: %ptr.7dc = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %VirtualIntermediate.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @VirtualIntermediate.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @VirtualBase { // CHECK:STDOUT: %VirtualBase.F.decl: %VirtualBase.F.type = fn_decl @VirtualBase.F [concrete = constants.%VirtualBase.F] { // CHECK:STDOUT: %self.patt: %pattern_type.ad4 = binding_pattern self [concrete] @@ -2344,10 +1843,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%VirtualBase [concrete = constants.%VirtualBase] // CHECK:STDOUT: %self: %VirtualBase = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%VirtualBase [concrete = constants.%VirtualBase] -// CHECK:STDOUT: impl_decl @VirtualBase.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@VirtualBase.as.Destroy.impl.%VirtualBase.as.Destroy.impl.Op.decl), @VirtualBase.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.f1b] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @VirtualBase.vtable [concrete = constants.%VirtualBase.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2361,10 +1856,6 @@ class T2(G2:! type) { // CHECK:STDOUT: class @VirtualIntermediate { // CHECK:STDOUT: %VirtualBase.ref: type = name_ref VirtualBase, file.%VirtualBase.decl [concrete = constants.%VirtualBase] // CHECK:STDOUT: %.loc9: %VirtualIntermediate.elem = base_decl %VirtualBase.ref, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%VirtualIntermediate [concrete = constants.%VirtualIntermediate] -// CHECK:STDOUT: impl_decl @VirtualIntermediate.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@VirtualIntermediate.as.Destroy.impl.%VirtualIntermediate.as.Destroy.impl.Op.decl), @VirtualIntermediate.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c3a] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @VirtualIntermediate.vtable [concrete = constants.%VirtualIntermediate.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.61e [concrete = constants.%complete_type.f09] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2388,10 +1879,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] // CHECK:STDOUT: %self: %Derived = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.43c [concrete = constants.%complete_type.fa6] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2419,14 +1906,8 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @VirtualBase.F(%self.param: %VirtualBase); // CHECK:STDOUT: -// CHECK:STDOUT: fn @VirtualBase.as.Destroy.impl.Op(%self.param: %ptr.e57) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @VirtualIntermediate.as.Destroy.impl.Op(%self.param: %ptr.7dc) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: override fn @Derived.F(%self.param: %Derived); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_impl_mismatch.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2434,13 +1915,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F [concrete] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] @@ -2455,11 +1929,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Derived.F.type: type = fn_type @Derived.F [concrete] // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base [concrete] @@ -2467,12 +1936,10 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2487,38 +1954,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.bcc = binding_pattern self [concrete] @@ -2528,10 +1963,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] // CHECK:STDOUT: %self: %Base = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2561,10 +1992,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %v: %i32 = bind_name v, %v.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base [concrete = constants.%complete_type.15c] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2588,31 +2015,15 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Base.F(%self.param: %Base); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: override fn @Derived.F(%self.param: %Derived, %v.param: %i32); // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_impl_conversion.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T1: type = class_type @T1 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.073: = impl_witness @T1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.87b: type = ptr_type %T1 [concrete] -// CHECK:STDOUT: %pattern_type.a36: type = pattern_type %ptr.87b [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.type = 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: %T2: type = class_type @T2 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.9ca: = impl_witness @T2.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.63e: type = ptr_type %T2 [concrete] -// CHECK:STDOUT: %pattern_type.fb8: type = pattern_type %ptr.63e [concrete] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.type: type = fn_type @T2.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op: %T2.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.e3d: type = facet_type <@ImplicitAs, @ImplicitAs(%T1)> [concrete] @@ -2626,11 +2037,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F [concrete] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.090: = impl_witness @Base.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] -// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] @@ -2640,11 +2046,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %Derived.F.type: type = fn_type @Derived.F [concrete] // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base [concrete] @@ -2652,12 +2053,10 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2685,38 +2084,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @T1.as.Destroy.impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: %T1.as.Destroy.impl.Op.type = fn_decl @T1.as.Destroy.impl.Op [concrete = constants.%T1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a36 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a36 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.87b = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: %self: %ptr.87b = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @T2.as.Destroy.impl: @T2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.decl: %T2.as.Destroy.impl.Op.type = fn_decl @T2.as.Destroy.impl.Op [concrete = constants.%T2.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.fb8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.fb8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.63e = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T2 [concrete = constants.%T2] -// CHECK:STDOUT: %self: %ptr.63e = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @T2.as.ImplicitAs.impl: %T2.ref as %ImplicitAs.type { // CHECK:STDOUT: %T2.as.ImplicitAs.impl.Convert.decl: %T2.as.ImplicitAs.impl.Convert.type = fn_decl @T2.as.ImplicitAs.impl.Convert [concrete = constants.%T2.as.ImplicitAs.impl.Convert] { // CHECK:STDOUT: %self.patt: %pattern_type.682 = binding_pattern self [concrete] @@ -2738,43 +2105,7 @@ class T2(G2:! type) { // CHECK:STDOUT: witness = file.%ImplicitAs.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Base.as.Destroy.impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: %Base.as.Destroy.impl.Op.type = fn_decl @Base.as.Destroy.impl.Op [concrete = constants.%Base.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: %self: %ptr.11f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc20: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @T1 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.073] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -2783,10 +2114,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @T2 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T2 [concrete = constants.%T2] -// CHECK:STDOUT: impl_decl @T2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T2.as.Destroy.impl.%T2.as.Destroy.impl.Op.decl), @T2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.9ca] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -2808,10 +2135,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %return.param: ref %T1 = out_param call_param1 // CHECK:STDOUT: %return: ref %T1 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.090] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2840,10 +2163,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %return.param: ref %T2 = out_param call_param1 // CHECK:STDOUT: %return: ref %T2 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base [concrete = constants.%complete_type.15c] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -2866,10 +2185,6 @@ class T2(G2:! type) { // CHECK:STDOUT: @Derived.%Derived.F.decl // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @T1.as.Destroy.impl.Op(%self.param: %ptr.87b) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @T2.as.Destroy.impl.Op(%self.param: %ptr.63e) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @T2.as.ImplicitAs.impl.Convert(%self.param: %T2) -> %return.param: %T1 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc12_13.1: %empty_struct_type = struct_literal () @@ -2880,12 +2195,8 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @Base.F(%self.param: %Base) -> %return.param: %T1; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Base.as.Destroy.impl.Op(%self.param: %ptr.11f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: override fn @Derived.F(%self.param: %Derived) -> %return.param: %T2; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_generic_virtual_decl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2899,27 +2210,18 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.9f7: type = pattern_type %Base [symbolic] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F, @Base(%T) [symbolic] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.b7c: type = ptr_type %Base [symbolic] -// CHECK:STDOUT: %pattern_type.8d4: type = pattern_type %ptr.b7c [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type [concrete] // CHECK:STDOUT: %Base.F.specific_fn: = specific_function %Base.F, @Base.F(%T) [symbolic] -// CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] -// CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] +// CHECK:STDOUT: %Base.vtable_decl: ref %ptr = vtable_decl @Base.vtable [concrete] +// CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2936,35 +2238,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Base.as.Destroy.impl(@Base.%T.loc7_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic = %Base.as.Destroy.impl.Op.type (constants.%Base.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = fn_decl @Base.as.Destroy.impl.Op [symbolic = @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7_27.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = value_param call_param0 -// CHECK:STDOUT: %.loc7_27.2: type = splice_block %Self.ref [symbolic = %Base (constants.%Base)] { -// CHECK:STDOUT: %.loc7_27.3: type = specific_constant constants.%Base, @Base(constants.%T) [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc7_27.3 [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc7_17.2: type) { // CHECK:STDOUT: %T.loc7_17.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_17.1 (constants.%T)] // CHECK:STDOUT: @@ -2985,12 +2258,8 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: @Base.F.%Base (%Base) = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [symbolic = @Base.as.Destroy.impl.%Base (constants.%Base)] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Base.as.Destroy.impl(constants.%T) [symbolic = @Base.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %Base.F.specific_fn.loc13_1.1: = specific_function %Base.F.decl, @Base.F(constants.%T) [symbolic = %Base.F.specific_fn.loc13_1.2 (constants.%Base.F.specific_fn)] -// CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] +// CHECK:STDOUT: %vtable_decl: ref %ptr = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: vtable_decl = %vtable_decl @@ -3013,17 +2282,6 @@ class T2(G2:! type) { // CHECK:STDOUT: virtual fn(%self.param: @Base.F.%Base (%Base)); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.as.Destroy.impl.Op(@Base.%T.loc7_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: %ptr: type = ptr_type %Base [symbolic = %ptr (constants.%ptr.b7c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8d4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T) { // CHECK:STDOUT: %T.loc7_17.1 => constants.%T // CHECK:STDOUT: } @@ -3034,30 +2292,10 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9f7 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base -// CHECK:STDOUT: %ptr => constants.%ptr.b7c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d4 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- impl_generic_base.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T1: type = class_type @T1 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.073: = impl_witness @T1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.87b: type = ptr_type %T1 [concrete] -// CHECK:STDOUT: %pattern_type.a36: type = pattern_type %ptr.87b [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -3071,11 +2309,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Base.F.type.f17: type = fn_type @Base.F, @Base(%T) [symbolic] // CHECK:STDOUT: %Base.F.e26: %Base.F.type.f17 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.87c: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.b7c: type = ptr_type %Base.370 [symbolic] -// CHECK:STDOUT: %pattern_type.8d4: type = pattern_type %ptr.b7c [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.F.specific_fn.892: = specific_function %Base.F.e26, @Base.F(%T) [symbolic] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] @@ -3094,11 +2327,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %Derived.F.type: type = fn_type @Derived.F [concrete] // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.base.fda: type = struct_type {.base: %Base.ea5} [concrete] // CHECK:STDOUT: %complete_type.65a: = complete_type_witness %struct_type.base.fda [concrete] @@ -3106,11 +2334,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -3131,72 +2357,7 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @T1.as.Destroy.impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: %T1.as.Destroy.impl.Op.type = fn_decl @T1.as.Destroy.impl.Op [concrete = constants.%T1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a36 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a36 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.87b = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: %self: %ptr.87b = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Base.as.Destroy.impl(@Base.%T.loc7_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic = %Base.as.Destroy.impl.Op.type (constants.%Base.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = fn_decl @Base.as.Destroy.impl.Op [symbolic = @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7_27.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = value_param call_param0 -// CHECK:STDOUT: %.loc7_27.2: type = splice_block %Self.ref [symbolic = %Base (constants.%Base.370)] { -// CHECK:STDOUT: %.loc7_27.3: type = specific_constant constants.%Base.370, @Base(constants.%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc7_27.3 [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @T1 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.073] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -3229,10 +2390,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T.ref: type = name_ref T, @Base.%T.loc7_17.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %t: @Base.F.%T (%T) = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base.370 [symbolic = @Base.as.Destroy.impl.%Base (constants.%Base.370)] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Base.as.Destroy.impl(constants.%T) [symbolic = @Base.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] // CHECK:STDOUT: %Base.F.specific_fn.loc9_1.1: = specific_function %Base.F.decl, @Base.F(constants.%T) [symbolic = %Base.F.specific_fn.loc9_1.2 (constants.%Base.F.specific_fn.892)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] @@ -3265,10 +2422,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T1.ref: type = name_ref T1, file.%T1.decl [concrete = constants.%T1] // CHECK:STDOUT: %t: %T1 = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.fda [concrete = constants.%complete_type.65a] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -3291,8 +2444,6 @@ class T2(G2:! type) { // CHECK:STDOUT: @Derived.%Derived.F.decl // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @T1.as.Destroy.impl.Op(%self.param: %ptr.87b) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic virtual fn @Base.F(@Base.%T.loc7_17.2: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] @@ -3309,24 +2460,11 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.as.Destroy.impl.Op(@Base.%T.loc7_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %ptr: type = ptr_type %Base [symbolic = %ptr (constants.%ptr.b7c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8d4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: override fn @Derived.F(%self.param: %Derived, %t.param: %T1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T) { // CHECK:STDOUT: %T.loc7_17.1 => constants.%T // CHECK:STDOUT: @@ -3347,19 +2485,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete.loc8_29 => constants.%require_complete.4ae // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.87c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %ptr => constants.%ptr.b7c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d4 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T1) { // CHECK:STDOUT: %T.loc7_17.1 => constants.%T1 // CHECK:STDOUT: @@ -3388,35 +2513,21 @@ class T2(G2:! type) { // CHECK:STDOUT: %T1.F: %T1.F.type = struct_value () [concrete] // CHECK:STDOUT: %T1.G.type: type = fn_type @T1.G [concrete] // CHECK:STDOUT: %T1.G: %T1.G.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.073: = impl_witness @T1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.87b: type = ptr_type %T1 [concrete] -// CHECK:STDOUT: %pattern_type.a36: type = pattern_type %ptr.87b [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.type = 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: %T2: type = class_type @T2 [concrete] // CHECK:STDOUT: %T2.elem: type = unbound_element_type %T2, %T1 [concrete] // CHECK:STDOUT: %T2.F.type: type = fn_type @T2.F [concrete] // CHECK:STDOUT: %T2.F: %T2.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.9ca: = impl_witness @T2.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.63e: type = ptr_type %T2 [concrete] -// CHECK:STDOUT: %pattern_type.fb8: type = pattern_type %ptr.63e [concrete] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.type: type = fn_type @T2.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op: %T2.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %T1} [concrete] // CHECK:STDOUT: %complete_type.e14: = complete_type_witness %struct_type.base [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -3430,45 +2541,9 @@ class T2(G2:! type) { // CHECK:STDOUT: %T2.decl: type = class_decl @T2 [concrete = constants.%T2] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @T1.as.Destroy.impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: %T1.as.Destroy.impl.Op.type = fn_decl @T1.as.Destroy.impl.Op [concrete = constants.%T1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a36 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a36 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.87b = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: %self: %ptr.87b = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @T2.as.Destroy.impl: @T2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.decl: %T2.as.Destroy.impl.Op.type = fn_decl @T2.as.Destroy.impl.Op [concrete = constants.%T2.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.fb8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.fb8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.63e = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T2 [concrete = constants.%T2] -// CHECK:STDOUT: %self: %ptr.63e = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @T1 { // CHECK:STDOUT: %T1.F.decl: %T1.F.type = fn_decl @T1.F [concrete = constants.%T1.F] {} {} // CHECK:STDOUT: %T1.G.decl: %T1.G.type = fn_decl @T1.G [concrete = constants.%T1.G] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.073] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -3482,10 +2557,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T1.ref: type = name_ref T1, file.%T1.decl [concrete = constants.%T1] // CHECK:STDOUT: %.loc18: %T2.elem = base_decl %T1.ref, element0 [concrete] // CHECK:STDOUT: %T2.F.decl: %T2.F.type = fn_decl @T2.F [concrete = constants.%T2.F] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T2 [concrete = constants.%T2] -// CHECK:STDOUT: impl_decl @T2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T2.as.Destroy.impl.%T2.as.Destroy.impl.Op.decl), @T2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.9ca] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base [concrete = constants.%complete_type.e14] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -3501,12 +2572,8 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: fn @T1.G(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @T1.as.Destroy.impl.Op(%self.param: %ptr.87b) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @T2.F(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @T2.as.Destroy.impl.Op(%self.param: %ptr.63e) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_addr_self_mismatch.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -3515,11 +2582,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.a36: type = pattern_type %ptr.87b [concrete] // CHECK:STDOUT: %T1.F1.type: type = fn_type @T1.F1 [concrete] // CHECK:STDOUT: %T1.F1: %T1.F1.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.073: = impl_witness @T1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %T1.vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] @@ -3528,11 +2590,9 @@ class T2(G2:! type) { // CHECK:STDOUT: %T2.elem: type = unbound_element_type %T2, %T1 [concrete] // CHECK:STDOUT: %ptr.63e: type = ptr_type %T2 [concrete] // CHECK:STDOUT: %pattern_type.fb8: type = pattern_type %ptr.63e [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %T2.F1.type: type = fn_type @T2.F1 [concrete] // CHECK:STDOUT: %T2.F1: %T2.F1.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.9ca: = impl_witness @T2.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.type: type = fn_type @T2.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op: %T2.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %T2.vtable_decl: ref %ptr.454 = vtable_decl @T2.vtable [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %T1} [concrete] // CHECK:STDOUT: %complete_type.e14: = complete_type_witness %struct_type.base [concrete] @@ -3540,11 +2600,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -3558,38 +2616,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T2.decl: type = class_decl @T2 [concrete = constants.%T2] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @T1.as.Destroy.impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: %T1.as.Destroy.impl.Op.type = fn_decl @T1.as.Destroy.impl.Op [concrete = constants.%T1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a36 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a36 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.87b = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: %self: %ptr.87b = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @T2.as.Destroy.impl: @T2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.decl: %T2.as.Destroy.impl.Op.type = fn_decl @T2.as.Destroy.impl.Op [concrete = constants.%T2.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.fb8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.fb8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.63e = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T2 [concrete = constants.%T2] -// CHECK:STDOUT: %self: %ptr.63e = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @T1 { // CHECK:STDOUT: %T1.F1.decl: %T1.F1.type = fn_decl @T1.F1 [concrete = constants.%T1.F1] { // CHECK:STDOUT: %self.patt: %pattern_type.a36 = binding_pattern self [concrete] @@ -3602,10 +2628,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: %ptr.87b = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.073] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete = constants.%T1.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -3631,10 +2653,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: %ptr.63e = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T2 [concrete = constants.%T2] -// CHECK:STDOUT: impl_decl @T2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T2.as.Destroy.impl.%T2.as.Destroy.impl.Op.decl), @T2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.9ca] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @T2.vtable [concrete = constants.%T2.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base [concrete = constants.%complete_type.e14] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -3658,12 +2676,8 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: virtual fn @T1.F1(%self.param: %ptr.87b); // CHECK:STDOUT: -// CHECK:STDOUT: fn @T1.as.Destroy.impl.Op(%self.param: %ptr.87b) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: override fn @T2.F1(%self.param: %ptr.63e); // CHECK:STDOUT: -// CHECK:STDOUT: fn @T2.as.Destroy.impl.Op(%self.param: %ptr.63e) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_generic_virtual.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -3675,24 +2689,15 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %T1.F.type: type = fn_type @T1.F [concrete] // CHECK:STDOUT: %T1.F: %T1.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.87b: type = ptr_type %T1 [concrete] -// CHECK:STDOUT: %pattern_type.a36: type = pattern_type %ptr.87b [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -3704,22 +2709,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T1.decl: type = class_decl @T1 [concrete = constants.%T1] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @T1.as.Destroy.impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: %T1.as.Destroy.impl.Op.type = fn_decl @T1.as.Destroy.impl.Op [concrete = constants.%T1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a36 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a36 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.87b = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: %self: %ptr.87b = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @T1 { // CHECK:STDOUT: %T1.F.decl: %T1.F.type = fn_decl @T1.F [concrete = constants.%T1.F] { // CHECK:STDOUT: %self.patt: %pattern_type.28b = binding_pattern self [concrete] @@ -3732,10 +2721,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %T.loc9_28.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc9_28.1 (constants.%T)] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -3750,8 +2735,6 @@ class T2(G2:! type) { // CHECK:STDOUT: virtual fn(%self.param: %T1); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @T1.as.Destroy.impl.Op(%self.param: %ptr.87b) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @T1.F(constants.%T) { // CHECK:STDOUT: %T.loc9_28.1 => constants.%T // CHECK:STDOUT: } @@ -3770,24 +2753,15 @@ class T2(G2:! type) { // CHECK:STDOUT: %T.336: type = bind_symbolic_name T, 1 [symbolic] // CHECK:STDOUT: %T1.F.type: type = fn_type @T1.F, @T1(%T.8b3) [symbolic] // CHECK:STDOUT: %T1.F: %T1.F.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %ptr.997: type = ptr_type %T1 [symbolic] -// CHECK:STDOUT: %pattern_type.f06: type = pattern_type %ptr.997 [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.type = 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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -3804,35 +2778,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @T1.as.Destroy.impl(@T1.%T.loc4_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%T) [symbolic = %T1.as.Destroy.impl.Op.type (constants.%T1.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = struct_value () [symbolic = %T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = fn_decl @T1.as.Destroy.impl.Op [symbolic = @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = value_param call_param0 -// CHECK:STDOUT: %.loc4_25.2: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1)] { -// CHECK:STDOUT: %.loc4_25.3: type = specific_constant constants.%T1, @T1(constants.%T.8b3) [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_25.3 [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @T1(%T.loc4_15.2: type) { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.1 (constants.%T.8b3)] // CHECK:STDOUT: @@ -3855,10 +2800,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %T.loc9_28.2: type = bind_symbolic_name T, 1 [symbolic = %T.loc9_28.1 (constants.%T.336)] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [symbolic = @T1.as.Destroy.impl.%T1 (constants.%T1)] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @T1.as.Destroy.impl(constants.%T.8b3) [symbolic = @T1.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -3877,17 +2818,6 @@ class T2(G2:! type) { // CHECK:STDOUT: virtual fn(%self.param: @T1.F.%T1 (%T1)); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @T1.as.Destroy.impl.Op(@T1.%T.loc4_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: %ptr: type = ptr_type %T1 [symbolic = %ptr (constants.%ptr.997)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.f06)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @T1(constants.%T.8b3) { // CHECK:STDOUT: %T.loc4_15.1 => constants.%T.8b3 // CHECK:STDOUT: } @@ -3899,19 +2829,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T.loc9_28.1 => constants.%T.336 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %T1 => constants.%T1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl.Op(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %T1 => constants.%T1 -// CHECK:STDOUT: %ptr => constants.%ptr.997 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f06 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- generic_with_virtual.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -3925,13 +2842,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.48e: type = pattern_type %T1 [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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.997: type = ptr_type %T1 [symbolic] -// CHECK:STDOUT: %pattern_type.f06: type = pattern_type %ptr.997 [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %T1.F.specific_fn: = specific_function %T1.F, @T1.F(%T) [symbolic] // CHECK:STDOUT: %T1.vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete] @@ -3942,11 +2852,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -3963,35 +2871,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @T1.as.Destroy.impl(@T1.%T.loc4_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%T) [symbolic = %T1.as.Destroy.impl.Op.type (constants.%T1.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = struct_value () [symbolic = %T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = fn_decl @T1.as.Destroy.impl.Op [symbolic = @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = value_param call_param0 -// CHECK:STDOUT: %.loc4_25.2: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1)] { -// CHECK:STDOUT: %.loc4_25.3: type = specific_constant constants.%T1, @T1(constants.%T) [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_25.3 [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @T1(%T.loc4_15.2: type) { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.1 (constants.%T)] // CHECK:STDOUT: @@ -4012,10 +2891,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: @T1.F.%T1 (%T1) = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [symbolic = @T1.as.Destroy.impl.%T1 (constants.%T1)] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @T1.as.Destroy.impl(constants.%T) [symbolic = @T1.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %T1.F.specific_fn.loc6_1.1: = specific_function %T1.F.decl, @T1.F(constants.%T) [symbolic = %T1.F.specific_fn.loc6_1.2 (constants.%T1.F.specific_fn)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete = constants.%T1.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type] @@ -4046,17 +2921,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @T1.as.Destroy.impl.Op(@T1.%T.loc4_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: %ptr: type = ptr_type %T1 [symbolic = %ptr (constants.%ptr.997)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.f06)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @T1(constants.%T) { // CHECK:STDOUT: %T.loc4_15.1 => constants.%T // CHECK:STDOUT: @@ -4075,19 +2939,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete => constants.%require_complete // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %T1 => constants.%T1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %T1 => constants.%T1 -// CHECK:STDOUT: %ptr => constants.%ptr.997 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f06 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- with_dependent_arg.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -4102,13 +2953,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.997: type = ptr_type %T1 [symbolic] -// CHECK:STDOUT: %pattern_type.f06: type = pattern_type %ptr.997 [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %T1.F.specific_fn: = specific_function %T1.F, @T1.F(%T) [symbolic] // CHECK:STDOUT: %T1.vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete] @@ -4120,11 +2964,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -4141,35 +2983,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @T1.as.Destroy.impl(@T1.%T.loc4_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%T) [symbolic = %T1.as.Destroy.impl.Op.type (constants.%T1.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = struct_value () [symbolic = %T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = fn_decl @T1.as.Destroy.impl.Op [symbolic = @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = value_param call_param0 -// CHECK:STDOUT: %.loc4_25.2: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1)] { -// CHECK:STDOUT: %.loc4_25.3: type = specific_constant constants.%T1, @T1(constants.%T) [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_25.3 [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @T1(%T.loc4_15.2: type) { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.1 (constants.%T)] // CHECK:STDOUT: @@ -4195,10 +3008,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T.ref: type = name_ref T, @T1.%T.loc4_15.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %t: @T1.F.%T (%T) = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [symbolic = @T1.as.Destroy.impl.%T1 (constants.%T1)] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @T1.as.Destroy.impl(constants.%T) [symbolic = @T1.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %T1.F.specific_fn.loc6_1.1: = specific_function %T1.F.decl, @T1.F(constants.%T) [symbolic = %T1.F.specific_fn.loc6_1.2 (constants.%T1.F.specific_fn)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete = constants.%T1.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type] @@ -4232,17 +3041,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @T1.as.Destroy.impl.Op(@T1.%T.loc4_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] -// CHECK:STDOUT: %ptr: type = ptr_type %T1 [symbolic = %ptr (constants.%ptr.997)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.f06)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @T1(constants.%T) { // CHECK:STDOUT: %T.loc4_15.1 => constants.%T // CHECK:STDOUT: @@ -4263,19 +3061,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete.loc5_29 => constants.%require_complete.4ae // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %T1 => constants.%T1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %T1 => constants.%T1 -// CHECK:STDOUT: %ptr => constants.%ptr.997 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f06 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- vtable_import_unneeded.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -4345,13 +3130,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %NonGenericBase.F1: %NonGenericBase.F1.type = struct_value () [concrete] // CHECK:STDOUT: %NonGenericBase.F2.type: type = fn_type @NonGenericBase.F2 [concrete] // CHECK:STDOUT: %NonGenericBase.F2: %NonGenericBase.F2.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ff1: = impl_witness @NonGenericBase.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.806: type = ptr_type %NonGenericBase [concrete] -// CHECK:STDOUT: %pattern_type.f69: type = pattern_type %ptr.806 [concrete] -// CHECK:STDOUT: %NonGenericBase.as.Destroy.impl.Op.type: type = fn_type @NonGenericBase.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %NonGenericBase.as.Destroy.impl.Op: %NonGenericBase.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %NonGenericBase.vtable_decl: ref %ptr.454 = vtable_decl @NonGenericBase.vtable [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] @@ -4369,11 +3147,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %GenericDerived.F2: %GenericDerived.F2.type = struct_value () [symbolic] // CHECK:STDOUT: %GenericDerived.F3.type: type = fn_type @GenericDerived.F3, @GenericDerived(%T) [symbolic] // CHECK:STDOUT: %GenericDerived.F3: %GenericDerived.F3.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.4d6: = impl_witness @GenericDerived.%Destroy.impl_witness_table, @GenericDerived.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.6eb: type = ptr_type %GenericDerived [symbolic] -// CHECK:STDOUT: %pattern_type.d95: type = pattern_type %ptr.6eb [symbolic] -// CHECK:STDOUT: %GenericDerived.as.Destroy.impl.Op.type: type = fn_type @GenericDerived.as.Destroy.impl.Op, @GenericDerived.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %GenericDerived.as.Destroy.impl.Op: %GenericDerived.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %GenericDerived.F2.specific_fn: = specific_function %GenericDerived.F2, @GenericDerived.F2(%T) [symbolic] // CHECK:STDOUT: %GenericDerived.F3.specific_fn: = specific_function %GenericDerived.F3, @GenericDerived.F3(%T) [symbolic] // CHECK:STDOUT: %GenericDerived.vtable_decl: ref %ptr.454 = vtable_decl @GenericDerived.vtable [concrete] @@ -4384,11 +3157,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -4407,51 +3178,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @NonGenericBase.as.Destroy.impl: @NonGenericBase.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %NonGenericBase.as.Destroy.impl.Op.decl: %NonGenericBase.as.Destroy.impl.Op.type = fn_decl @NonGenericBase.as.Destroy.impl.Op [concrete = constants.%NonGenericBase.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f69 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f69 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.806 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NonGenericBase [concrete = constants.%NonGenericBase] -// CHECK:STDOUT: %self: %ptr.806 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %NonGenericBase.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @NonGenericBase.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @GenericDerived.as.Destroy.impl(@GenericDerived.%T.loc9_27.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %GenericDerived: type = class_type @GenericDerived, @GenericDerived(%T) [symbolic = %GenericDerived (constants.%GenericDerived)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @GenericDerived.%Destroy.impl_witness_table, @GenericDerived.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.4d6)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %GenericDerived.as.Destroy.impl.Op.type: type = fn_type @GenericDerived.as.Destroy.impl.Op, @GenericDerived.as.Destroy.impl(%T) [symbolic = %GenericDerived.as.Destroy.impl.Op.type (constants.%GenericDerived.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %GenericDerived.as.Destroy.impl.Op: @GenericDerived.as.Destroy.impl.%GenericDerived.as.Destroy.impl.Op.type (%GenericDerived.as.Destroy.impl.Op.type) = struct_value () [symbolic = %GenericDerived.as.Destroy.impl.Op (constants.%GenericDerived.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @GenericDerived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %GenericDerived.as.Destroy.impl.Op.decl: @GenericDerived.as.Destroy.impl.%GenericDerived.as.Destroy.impl.Op.type (%GenericDerived.as.Destroy.impl.Op.type) = fn_decl @GenericDerived.as.Destroy.impl.Op [symbolic = @GenericDerived.as.Destroy.impl.%GenericDerived.as.Destroy.impl.Op (constants.%GenericDerived.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @GenericDerived.as.Destroy.impl.Op.%pattern_type (%pattern_type.d95) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @GenericDerived.as.Destroy.impl.Op.%pattern_type (%pattern_type.d95) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9_37.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @GenericDerived.as.Destroy.impl.Op.%ptr (%ptr.6eb) = value_param call_param0 -// CHECK:STDOUT: %.loc9_37.2: type = splice_block %Self.ref [symbolic = %GenericDerived (constants.%GenericDerived)] { -// CHECK:STDOUT: %.loc9_37.3: type = specific_constant constants.%GenericDerived, @GenericDerived(constants.%T) [symbolic = %GenericDerived (constants.%GenericDerived)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc9_37.3 [symbolic = %GenericDerived (constants.%GenericDerived)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @GenericDerived.as.Destroy.impl.Op.%ptr (%ptr.6eb) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %GenericDerived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @GenericDerived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @NonGenericBase { // CHECK:STDOUT: %NonGenericBase.F1.decl: %NonGenericBase.F1.type = fn_decl @NonGenericBase.F1 [concrete = constants.%NonGenericBase.F1] { // CHECK:STDOUT: %self.patt: %pattern_type.0b8 = binding_pattern self [concrete] @@ -4469,10 +3195,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NonGenericBase [concrete = constants.%NonGenericBase] // CHECK:STDOUT: %self: %NonGenericBase = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NonGenericBase [concrete = constants.%NonGenericBase] -// CHECK:STDOUT: impl_decl @NonGenericBase.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@NonGenericBase.as.Destroy.impl.%NonGenericBase.as.Destroy.impl.Op.decl), @NonGenericBase.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ff1] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @NonGenericBase.vtable [concrete = constants.%NonGenericBase.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -4522,10 +3244,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: @GenericDerived.F3.%GenericDerived (%GenericDerived) = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericDerived [symbolic = @GenericDerived.as.Destroy.impl.%GenericDerived (constants.%GenericDerived)] -// CHECK:STDOUT: impl_decl @GenericDerived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@GenericDerived.as.Destroy.impl.%GenericDerived.as.Destroy.impl.Op.decl), @GenericDerived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @GenericDerived.as.Destroy.impl(constants.%T) [symbolic = @GenericDerived.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.4d6)] // CHECK:STDOUT: %GenericDerived.F2.specific_fn.loc13_1.1: = specific_function %GenericDerived.F2.decl, @GenericDerived.F2(constants.%T) [symbolic = %GenericDerived.F2.specific_fn.loc13_1.2 (constants.%GenericDerived.F2.specific_fn)] // CHECK:STDOUT: %GenericDerived.F3.specific_fn.loc13_1.1: = specific_function %GenericDerived.F3.decl, @GenericDerived.F3(constants.%T) [symbolic = %GenericDerived.F3.specific_fn.loc13_1.2 (constants.%GenericDerived.F3.specific_fn)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @GenericDerived.vtable [concrete = constants.%GenericDerived.vtable_decl] @@ -4564,8 +3282,6 @@ class T2(G2:! type) { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @NonGenericBase.as.Destroy.impl.Op(%self.param: %ptr.806) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic override fn @GenericDerived.F2(@GenericDerived.%T.loc9_27.2: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %GenericDerived: type = class_type @GenericDerived, @GenericDerived(%T) [symbolic = %GenericDerived (constants.%GenericDerived)] @@ -4594,17 +3310,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @GenericDerived.as.Destroy.impl.Op(@GenericDerived.%T.loc9_27.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %GenericDerived: type = class_type @GenericDerived, @GenericDerived(%T) [symbolic = %GenericDerived (constants.%GenericDerived)] -// CHECK:STDOUT: %ptr: type = ptr_type %GenericDerived [symbolic = %ptr (constants.%ptr.6eb)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d95)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @GenericDerived.as.Destroy.impl.Op.%ptr (%ptr.6eb)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @GenericDerived(constants.%T) { // CHECK:STDOUT: %T.loc9_27.1 => constants.%T // CHECK:STDOUT: @@ -4637,19 +3342,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete => constants.%require_complete // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @GenericDerived.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %GenericDerived => constants.%GenericDerived -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.4d6 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @GenericDerived.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %GenericDerived => constants.%GenericDerived -// CHECK:STDOUT: %ptr => constants.%ptr.6eb -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d95 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- nongeneric_derived_from_generic.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -4665,13 +3357,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %GenericBase.F1.80a: %GenericBase.F1.type.2af = struct_value () [symbolic] // CHECK:STDOUT: %GenericBase.F2.type.2ca: type = fn_type @GenericBase.F2, @GenericBase(%T) [symbolic] // CHECK:STDOUT: %GenericBase.F2.414: %GenericBase.F2.type.2ca = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.5df: = impl_witness @GenericBase.%Destroy.impl_witness_table, @GenericBase.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.b68: type = ptr_type %GenericBase.018 [symbolic] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %ptr.b68 [symbolic] -// CHECK:STDOUT: %GenericBase.as.Destroy.impl.Op.type: type = fn_type @GenericBase.as.Destroy.impl.Op, @GenericBase.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %GenericBase.as.Destroy.impl.Op: %GenericBase.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %GenericBase.F1.specific_fn.aea: = specific_function %GenericBase.F1.80a, @GenericBase.F1(%T) [symbolic] // CHECK:STDOUT: %GenericBase.F2.specific_fn.758: = specific_function %GenericBase.F2.414, @GenericBase.F2(%T) [symbolic] @@ -4695,11 +3380,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %NonGenericDerived.F2: %NonGenericDerived.F2.type = struct_value () [concrete] // CHECK:STDOUT: %NonGenericDerived.F3.type: type = fn_type @NonGenericDerived.F3 [concrete] // CHECK:STDOUT: %NonGenericDerived.F3: %NonGenericDerived.F3.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ec1: = impl_witness @NonGenericDerived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.821: type = ptr_type %NonGenericDerived [concrete] -// CHECK:STDOUT: %pattern_type.eb2: type = pattern_type %ptr.821 [concrete] -// CHECK:STDOUT: %NonGenericDerived.as.Destroy.impl.Op.type: type = fn_type @NonGenericDerived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %NonGenericDerived.as.Destroy.impl.Op: %NonGenericDerived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %NonGenericDerived.vtable_decl: ref %ptr.454 = vtable_decl @NonGenericDerived.vtable [concrete] // CHECK:STDOUT: %struct_type.base.29a: type = struct_type {.base: %GenericBase.f84} [concrete] // CHECK:STDOUT: %complete_type.b6e: = complete_type_witness %struct_type.base.29a [concrete] @@ -4707,11 +3387,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -4732,51 +3410,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %NonGenericDerived.decl: type = class_decl @NonGenericDerived [concrete = constants.%NonGenericDerived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @GenericBase.as.Destroy.impl(@GenericBase.%T.loc4_24.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %GenericBase: type = class_type @GenericBase, @GenericBase(%T) [symbolic = %GenericBase (constants.%GenericBase.018)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @GenericBase.%Destroy.impl_witness_table, @GenericBase.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.5df)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %GenericBase.as.Destroy.impl.Op.type: type = fn_type @GenericBase.as.Destroy.impl.Op, @GenericBase.as.Destroy.impl(%T) [symbolic = %GenericBase.as.Destroy.impl.Op.type (constants.%GenericBase.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %GenericBase.as.Destroy.impl.Op: @GenericBase.as.Destroy.impl.%GenericBase.as.Destroy.impl.Op.type (%GenericBase.as.Destroy.impl.Op.type) = struct_value () [symbolic = %GenericBase.as.Destroy.impl.Op (constants.%GenericBase.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @GenericBase.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %GenericBase.as.Destroy.impl.Op.decl: @GenericBase.as.Destroy.impl.%GenericBase.as.Destroy.impl.Op.type (%GenericBase.as.Destroy.impl.Op.type) = fn_decl @GenericBase.as.Destroy.impl.Op [symbolic = @GenericBase.as.Destroy.impl.%GenericBase.as.Destroy.impl.Op (constants.%GenericBase.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @GenericBase.as.Destroy.impl.Op.%pattern_type (%pattern_type.bbc) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @GenericBase.as.Destroy.impl.Op.%pattern_type (%pattern_type.bbc) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_34.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @GenericBase.as.Destroy.impl.Op.%ptr (%ptr.b68) = value_param call_param0 -// CHECK:STDOUT: %.loc4_34.2: type = splice_block %Self.ref [symbolic = %GenericBase (constants.%GenericBase.018)] { -// CHECK:STDOUT: %.loc4_34.3: type = specific_constant constants.%GenericBase.018, @GenericBase(constants.%T) [symbolic = %GenericBase (constants.%GenericBase.018)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_34.3 [symbolic = %GenericBase (constants.%GenericBase.018)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @GenericBase.as.Destroy.impl.Op.%ptr (%ptr.b68) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %GenericBase.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @GenericBase.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @NonGenericDerived.as.Destroy.impl: @NonGenericDerived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %NonGenericDerived.as.Destroy.impl.Op.decl: %NonGenericDerived.as.Destroy.impl.Op.type = fn_decl @NonGenericDerived.as.Destroy.impl.Op [concrete = constants.%NonGenericDerived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.eb2 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.eb2 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.821 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NonGenericDerived [concrete = constants.%NonGenericDerived] -// CHECK:STDOUT: %self: %ptr.821 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %NonGenericDerived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @NonGenericDerived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericBase(%T.loc4_24.2: type) { // CHECK:STDOUT: %T.loc4_24.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_24.1 (constants.%T)] // CHECK:STDOUT: @@ -4811,10 +3444,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: @GenericBase.F2.%GenericBase (%GenericBase.018) = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericBase.018 [symbolic = @GenericBase.as.Destroy.impl.%GenericBase (constants.%GenericBase.018)] -// CHECK:STDOUT: impl_decl @GenericBase.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@GenericBase.as.Destroy.impl.%GenericBase.as.Destroy.impl.Op.decl), @GenericBase.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @GenericBase.as.Destroy.impl(constants.%T) [symbolic = @GenericBase.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.5df)] // CHECK:STDOUT: %GenericBase.F1.specific_fn.loc7_1.1: = specific_function %GenericBase.F1.decl, @GenericBase.F1(constants.%T) [symbolic = %GenericBase.F1.specific_fn.loc7_1.2 (constants.%GenericBase.F1.specific_fn.aea)] // CHECK:STDOUT: %GenericBase.F2.specific_fn.loc7_1.1: = specific_function %GenericBase.F2.decl, @GenericBase.F2(constants.%T) [symbolic = %GenericBase.F2.specific_fn.loc7_1.2 (constants.%GenericBase.F2.specific_fn.758)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @GenericBase.vtable [concrete = constants.%GenericBase.vtable_decl] @@ -4852,10 +3481,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NonGenericDerived [concrete = constants.%NonGenericDerived] // CHECK:STDOUT: %self: %NonGenericDerived = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NonGenericDerived [concrete = constants.%NonGenericDerived] -// CHECK:STDOUT: impl_decl @NonGenericDerived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@NonGenericDerived.as.Destroy.impl.%NonGenericDerived.as.Destroy.impl.Op.decl), @NonGenericDerived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ec1] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @NonGenericDerived.vtable [concrete = constants.%NonGenericDerived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.29a [concrete = constants.%complete_type.b6e] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -4910,17 +3535,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @GenericBase.as.Destroy.impl.Op(@GenericBase.%T.loc4_24.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %GenericBase: type = class_type @GenericBase, @GenericBase(%T) [symbolic = %GenericBase (constants.%GenericBase.018)] -// CHECK:STDOUT: %ptr: type = ptr_type %GenericBase [symbolic = %ptr (constants.%ptr.b68)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.bbc)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @GenericBase.as.Destroy.impl.Op.%ptr (%ptr.b68)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: override fn @NonGenericDerived.F2(%self.param: %NonGenericDerived) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return @@ -4931,8 +3545,6 @@ class T2(G2:! type) { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @NonGenericDerived.as.Destroy.impl.Op(%self.param: %ptr.821) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @GenericBase(constants.%T) { // CHECK:STDOUT: %T.loc4_24.1 => constants.%T // CHECK:STDOUT: @@ -4963,19 +3575,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete => constants.%require_complete // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @GenericBase.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %GenericBase => constants.%GenericBase.018 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.5df -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @GenericBase.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %GenericBase => constants.%GenericBase.018 -// CHECK:STDOUT: %ptr => constants.%ptr.b68 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.bbc -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @GenericBase(constants.%T1) { // CHECK:STDOUT: %T.loc4_24.1 => constants.%T1 // CHECK:STDOUT: @@ -5021,11 +3620,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.8d4: type = pattern_type %ptr.b7c [symbolic] // CHECK:STDOUT: %Base.F.type.f17: type = fn_type @Base.F, @Base(%T) [symbolic] // CHECK:STDOUT: %Base.F.e26: %Base.F.type.f17 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.87c: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.F.specific_fn.892: = specific_function %Base.F.e26, @Base.F(%T) [symbolic] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] @@ -5046,11 +3640,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.550: type = pattern_type %D1 [concrete] // CHECK:STDOUT: %D1.F.type: type = fn_type @D1.F [concrete] // CHECK:STDOUT: %D1.F: %D1.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.03b: = impl_witness @D1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.7a4: type = ptr_type %D1 [concrete] -// CHECK:STDOUT: %pattern_type.138: type = pattern_type %ptr.7a4 [concrete] -// CHECK:STDOUT: %D1.as.Destroy.impl.Op.type: type = fn_type @D1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D1.as.Destroy.impl.Op: %D1.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %D1.vtable_decl: ref %ptr.454 = vtable_decl @D1.vtable [concrete] // CHECK:STDOUT: %struct_type.base.fda: type = struct_type {.base: %Base.ea5} [concrete] // CHECK:STDOUT: %complete_type.65a: = complete_type_witness %struct_type.base.fda [concrete] @@ -5059,11 +3648,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -5084,51 +3671,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %D1.decl: type = class_decl @D1 [concrete = constants.%D1] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Base.as.Destroy.impl(@Base.%T.loc4_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic = %Base.as.Destroy.impl.Op.type (constants.%Base.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = fn_decl @Base.as.Destroy.impl.Op [symbolic = @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_27.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = value_param call_param0 -// CHECK:STDOUT: %.loc4_27.2: type = splice_block %Self.ref [symbolic = %Base (constants.%Base.370)] { -// CHECK:STDOUT: %.loc4_27.3: type = specific_constant constants.%Base.370, @Base(constants.%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_27.3 [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D1.as.Destroy.impl: @D1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D1.as.Destroy.impl.Op.decl: %D1.as.Destroy.impl.Op.type = fn_decl @D1.as.Destroy.impl.Op [concrete = constants.%D1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.138 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.138 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.7a4 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D1 [concrete = constants.%D1] -// CHECK:STDOUT: %self: %ptr.7a4 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_17.2: type) { // CHECK:STDOUT: %T.loc4_17.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] // CHECK:STDOUT: @@ -5159,10 +3701,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %t: @Base.F.%ptr.loc5_38.1 (%ptr.b7c) = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base.370 [symbolic = @Base.as.Destroy.impl.%Base (constants.%Base.370)] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Base.as.Destroy.impl(constants.%T) [symbolic = @Base.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] // CHECK:STDOUT: %Base.F.specific_fn.loc6_1.1: = specific_function %Base.F.decl, @Base.F(constants.%T) [symbolic = %Base.F.specific_fn.loc6_1.2 (constants.%Base.F.specific_fn.892)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] @@ -5203,10 +3741,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %t: %ptr.184 = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D1 [concrete = constants.%D1] -// CHECK:STDOUT: impl_decl @D1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D1.as.Destroy.impl.%D1.as.Destroy.impl.Op.decl), @D1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.03b] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @D1.vtable [concrete = constants.%D1.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.fda [concrete = constants.%complete_type.65a] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -5246,24 +3780,11 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.as.Destroy.impl.Op(@Base.%T.loc4_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %ptr: type = ptr_type %Base [symbolic = %ptr (constants.%ptr.b7c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8d4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: override fn @D1.F(%self.param: %D1, %t.param: %ptr.184) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D1.as.Destroy.impl.Op(%self.param: %ptr.7a4) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T) { // CHECK:STDOUT: %T.loc4_17.1 => constants.%T // CHECK:STDOUT: @@ -5285,19 +3806,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete.loc5_29 => constants.%require_complete.cbc // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.87c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %ptr => constants.%ptr.b7c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d4 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T1) { // CHECK:STDOUT: %T.loc4_17.1 => constants.%T1 // CHECK:STDOUT: @@ -5336,13 +3844,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.a36: type = pattern_type %ptr.87b [concrete] // CHECK:STDOUT: %Base.F.type.f17: type = fn_type @Base.F, @Base(%T) [symbolic] // CHECK:STDOUT: %Base.F.e26: %Base.F.type.f17 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.87c: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.b7c: type = ptr_type %Base.370 [symbolic] -// CHECK:STDOUT: %pattern_type.8d4: type = pattern_type %ptr.b7c [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.F.specific_fn.892: = specific_function %Base.F.e26, @Base.F(%T) [symbolic] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] @@ -5361,11 +3862,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.fb8: type = pattern_type %ptr.63e [concrete] // CHECK:STDOUT: %D1.F.type: type = fn_type @D1.F [concrete] // CHECK:STDOUT: %D1.F: %D1.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.03b: = impl_witness @D1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.7a4: type = ptr_type %D1 [concrete] -// CHECK:STDOUT: %pattern_type.138: type = pattern_type %ptr.7a4 [concrete] -// CHECK:STDOUT: %D1.as.Destroy.impl.Op.type: type = fn_type @D1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D1.as.Destroy.impl.Op: %D1.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %D1.vtable_decl: ref %ptr.454 = vtable_decl @D1.vtable [concrete] // CHECK:STDOUT: %struct_type.base.fda: type = struct_type {.base: %Base.ea5} [concrete] // CHECK:STDOUT: %complete_type.65a: = complete_type_witness %struct_type.base.fda [concrete] @@ -5373,11 +3869,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -5400,51 +3894,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %D1.decl: type = class_decl @D1 [concrete = constants.%D1] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Base.as.Destroy.impl(@Base.%T.loc7_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic = %Base.as.Destroy.impl.Op.type (constants.%Base.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = fn_decl @Base.as.Destroy.impl.Op [symbolic = @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7_27.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = value_param call_param0 -// CHECK:STDOUT: %.loc7_27.2: type = splice_block %Self.ref [symbolic = %Base (constants.%Base.370)] { -// CHECK:STDOUT: %.loc7_27.3: type = specific_constant constants.%Base.370, @Base(constants.%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc7_27.3 [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D1.as.Destroy.impl: @D1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D1.as.Destroy.impl.Op.decl: %D1.as.Destroy.impl.Op.type = fn_decl @D1.as.Destroy.impl.Op [concrete = constants.%D1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.138 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.138 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.7a4 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D1 [concrete = constants.%D1] -// CHECK:STDOUT: %self: %ptr.7a4 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @T1; // CHECK:STDOUT: // CHECK:STDOUT: class @T2; @@ -5477,10 +3926,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %t: %ptr.87b = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base.370 [symbolic = @Base.as.Destroy.impl.%Base (constants.%Base.370)] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Base.as.Destroy.impl(constants.%T) [symbolic = @Base.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] // CHECK:STDOUT: %Base.F.specific_fn.loc9_1.1: = specific_function %Base.F.decl, @Base.F(constants.%T) [symbolic = %Base.F.specific_fn.loc9_1.2 (constants.%Base.F.specific_fn.892)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] @@ -5516,10 +3961,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %t: %ptr.63e = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D1 [concrete = constants.%D1] -// CHECK:STDOUT: impl_decl @D1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D1.as.Destroy.impl.%D1.as.Destroy.impl.Op.decl), @D1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.03b] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @D1.vtable [concrete = constants.%D1.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.fda [concrete = constants.%complete_type.65a] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -5557,24 +3998,11 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.as.Destroy.impl.Op(@Base.%T.loc7_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %ptr: type = ptr_type %Base [symbolic = %ptr (constants.%ptr.b7c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8d4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: override fn @D1.F(%self.param: %D1, %t.param: %ptr.63e) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D1.as.Destroy.impl.Op(%self.param: %ptr.7a4) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T) { // CHECK:STDOUT: %T.loc7_17.1 => constants.%T // CHECK:STDOUT: @@ -5593,19 +4021,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete => constants.%require_complete // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.87c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %ptr => constants.%ptr.b7c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d4 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T1) { // CHECK:STDOUT: %T.loc7_17.1 => constants.%T1 // CHECK:STDOUT: @@ -5639,13 +4054,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F, @Base(%T) [symbolic] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.87c: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.b7c: type = ptr_type %Base [symbolic] -// CHECK:STDOUT: %pattern_type.8d4: type = pattern_type %ptr.b7c [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.F.specific_fn: = specific_function %Base.F, @Base.F(%T) [symbolic] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] @@ -5661,11 +4069,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Derived.F.type: type = fn_type @Derived.F, @Derived(%T) [symbolic] // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.87f: = impl_witness @Derived.%Destroy.impl_witness_table, @Derived.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.178: type = ptr_type %Derived [symbolic] -// CHECK:STDOUT: %pattern_type.520: type = pattern_type %ptr.178 [symbolic] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op, @Derived.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %Derived.F.specific_fn: = specific_function %Derived.F, @Derived.F(%T) [symbolic] // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.base.8ea: type = struct_type {.base: %Base} [symbolic] @@ -5676,11 +4079,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -5704,64 +4105,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Base.as.Destroy.impl(@Base.%T.loc4_21.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic = %Base.as.Destroy.impl.Op.type (constants.%Base.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = fn_decl @Base.as.Destroy.impl.Op [symbolic = @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_31.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = value_param call_param0 -// CHECK:STDOUT: %.loc4_31.2: type = splice_block %Self.ref [symbolic = %Base (constants.%Base)] { -// CHECK:STDOUT: %.loc4_31.3: type = specific_constant constants.%Base, @Base(constants.%T) [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_31.3 [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Derived.as.Destroy.impl(@Derived.%T.loc7_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Derived: type = class_type @Derived, @Derived(%T) [symbolic = %Derived (constants.%Derived)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Derived.%Destroy.impl_witness_table, @Derived.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.87f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op, @Derived.as.Destroy.impl(%T) [symbolic = %Derived.as.Destroy.impl.Op.type (constants.%Derived.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: @Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.type (%Derived.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Derived.as.Destroy.impl.Op (constants.%Derived.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: @Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.type (%Derived.as.Destroy.impl.Op.type) = fn_decl @Derived.as.Destroy.impl.Op [symbolic = @Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op (constants.%Derived.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Derived.as.Destroy.impl.Op.%pattern_type (%pattern_type.520) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Derived.as.Destroy.impl.Op.%pattern_type (%pattern_type.520) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Derived.as.Destroy.impl.Op.%ptr (%ptr.178) = value_param call_param0 -// CHECK:STDOUT: %.loc7_25.2: type = splice_block %Self.ref [symbolic = %Derived (constants.%Derived)] { -// CHECK:STDOUT: %.loc7_25.3: type = specific_constant constants.%Derived, @Derived(constants.%T) [symbolic = %Derived (constants.%Derived)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc7_25.3 [symbolic = %Derived (constants.%Derived)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Derived.as.Destroy.impl.Op.%ptr (%ptr.178) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_21.2: type) { // CHECK:STDOUT: %T.loc4_21.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_21.1 (constants.%T)] // CHECK:STDOUT: @@ -5790,10 +4133,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %t: @Base.F.%ptr.loc5_32.1 (%ptr.79f) = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [symbolic = @Base.as.Destroy.impl.%Base (constants.%Base)] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Base.as.Destroy.impl(constants.%T) [symbolic = @Base.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] // CHECK:STDOUT: %Base.F.specific_fn.loc6_1.1: = specific_function %Base.F.decl, @Base.F(constants.%T) [symbolic = %Base.F.specific_fn.loc6_1.2 (constants.%Base.F.specific_fn)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] @@ -5842,10 +4181,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T.ref: type = name_ref T, @Derived.%T.loc7_15.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %t: @Derived.F.%T (%T) = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [symbolic = @Derived.as.Destroy.impl.%Derived (constants.%Derived)] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Derived.as.Destroy.impl(constants.%T) [symbolic = @Derived.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.87f)] // CHECK:STDOUT: %Derived.F.specific_fn.loc17_1.1: = specific_function %Derived.F.decl, @Derived.F(constants.%T) [symbolic = %Derived.F.specific_fn.loc17_1.2 (constants.%Derived.F.specific_fn)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type.loc17_1.1: = complete_type_witness constants.%struct_type.base.8ea [symbolic = %complete_type.loc17_1.2 (constants.%complete_type.d5d)] @@ -5887,17 +4222,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.as.Destroy.impl.Op(@Base.%T.loc4_21.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: %ptr: type = ptr_type %Base [symbolic = %ptr (constants.%ptr.b7c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8d4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic override fn @Derived.F(@Derived.%T.loc7_15.2: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Derived: type = class_type @Derived, @Derived(%T) [symbolic = %Derived (constants.%Derived)] @@ -5916,17 +4240,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Derived.as.Destroy.impl.Op(@Derived.%T.loc7_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Derived: type = class_type @Derived, @Derived(%T) [symbolic = %Derived (constants.%Derived)] -// CHECK:STDOUT: %ptr: type = ptr_type %Derived [symbolic = %ptr (constants.%ptr.178)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.520)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Derived.as.Destroy.impl.Op.%ptr (%ptr.178)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T) { // CHECK:STDOUT: %T.loc4_21.1 => constants.%T // CHECK:STDOUT: @@ -5948,19 +4261,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete.loc5_29 => constants.%require_complete.6e5 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.87c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base -// CHECK:STDOUT: %ptr => constants.%ptr.b7c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d4 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Derived(constants.%T) { // CHECK:STDOUT: %T.loc7_15.1 => constants.%T // CHECK:STDOUT: @@ -5989,19 +4289,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete.loc16_30 => constants.%require_complete.4ae // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Derived.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Derived => constants.%Derived -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.87f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Derived.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Derived => constants.%Derived -// CHECK:STDOUT: %ptr => constants.%ptr.178 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.520 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- impl_generic_generic.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -6016,13 +4303,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Base.F.type.f17: type = fn_type @Base.F, @Base(%T) [symbolic] // CHECK:STDOUT: %Base.F.e26: %Base.F.type.f17 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.87c: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.b7c: type = ptr_type %Base.370 [symbolic] -// CHECK:STDOUT: %pattern_type.8d4: type = pattern_type %ptr.b7c [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.F.specific_fn.892: = specific_function %Base.F.e26, @Base.F(%T) [symbolic] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] @@ -6045,11 +4325,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.423: type = pattern_type %Derived [symbolic] // CHECK:STDOUT: %Derived.F.type: type = fn_type @Derived.F, @Derived(%T) [symbolic] // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.87f: = impl_witness @Derived.%Destroy.impl_witness_table, @Derived.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.178: type = ptr_type %Derived [symbolic] -// CHECK:STDOUT: %pattern_type.520: type = pattern_type %ptr.178 [symbolic] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op, @Derived.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %Derived.F.specific_fn: = specific_function %Derived.F, @Derived.F(%T) [symbolic] // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.base.d96: type = struct_type {.base: %Base.16b} [symbolic] @@ -6060,11 +4335,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -6088,64 +4361,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Base.as.Destroy.impl(@Base.%T.loc4_21.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic = %Base.as.Destroy.impl.Op.type (constants.%Base.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = fn_decl @Base.as.Destroy.impl.Op [symbolic = @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_31.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = value_param call_param0 -// CHECK:STDOUT: %.loc4_31.2: type = splice_block %Self.ref [symbolic = %Base (constants.%Base.370)] { -// CHECK:STDOUT: %.loc4_31.3: type = specific_constant constants.%Base.370, @Base(constants.%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_31.3 [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Derived.as.Destroy.impl(@Derived.%T.loc7_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Derived: type = class_type @Derived, @Derived(%T) [symbolic = %Derived (constants.%Derived)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Derived.%Destroy.impl_witness_table, @Derived.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.87f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op, @Derived.as.Destroy.impl(%T) [symbolic = %Derived.as.Destroy.impl.Op.type (constants.%Derived.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: @Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.type (%Derived.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Derived.as.Destroy.impl.Op (constants.%Derived.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: @Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.type (%Derived.as.Destroy.impl.Op.type) = fn_decl @Derived.as.Destroy.impl.Op [symbolic = @Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op (constants.%Derived.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Derived.as.Destroy.impl.Op.%pattern_type (%pattern_type.520) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Derived.as.Destroy.impl.Op.%pattern_type (%pattern_type.520) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Derived.as.Destroy.impl.Op.%ptr (%ptr.178) = value_param call_param0 -// CHECK:STDOUT: %.loc7_25.2: type = splice_block %Self.ref [symbolic = %Derived (constants.%Derived)] { -// CHECK:STDOUT: %.loc7_25.3: type = specific_constant constants.%Derived, @Derived(constants.%T) [symbolic = %Derived (constants.%Derived)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc7_25.3 [symbolic = %Derived (constants.%Derived)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Derived.as.Destroy.impl.Op.%ptr (%ptr.178) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_21.2: type) { // CHECK:STDOUT: %T.loc4_21.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_21.1 (constants.%T)] // CHECK:STDOUT: @@ -6171,10 +4386,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T.ref: type = name_ref T, @Base.%T.loc4_21.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %t: @Base.F.%T (%T) = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base.370 [symbolic = @Base.as.Destroy.impl.%Base (constants.%Base.370)] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Base.as.Destroy.impl(constants.%T) [symbolic = @Base.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] // CHECK:STDOUT: %Base.F.specific_fn.loc6_1.1: = specific_function %Base.F.decl, @Base.F(constants.%T) [symbolic = %Base.F.specific_fn.loc6_1.2 (constants.%Base.F.specific_fn.892)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] @@ -6228,10 +4439,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %t: @Derived.F.%ptr.loc9_32 (%ptr.79f) = bind_name t, %t.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [symbolic = @Derived.as.Destroy.impl.%Derived (constants.%Derived)] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Derived.as.Destroy.impl(constants.%T) [symbolic = @Derived.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.87f)] // CHECK:STDOUT: %Derived.F.specific_fn.loc10_1.1: = specific_function %Derived.F.decl, @Derived.F(constants.%T) [symbolic = %Derived.F.specific_fn.loc10_1.2 (constants.%Derived.F.specific_fn)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type.loc10_1.1: = complete_type_witness constants.%struct_type.base.d96 [symbolic = %complete_type.loc10_1.2 (constants.%complete_type.5dc)] @@ -6272,17 +4479,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.as.Destroy.impl.Op(@Base.%T.loc4_21.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %ptr: type = ptr_type %Base [symbolic = %ptr (constants.%ptr.b7c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8d4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic override fn @Derived.F(@Derived.%T.loc7_15.2: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Derived: type = class_type @Derived, @Derived(%T) [symbolic = %Derived (constants.%Derived)] @@ -6302,17 +4498,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Derived.as.Destroy.impl.Op(@Derived.%T.loc7_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Derived: type = class_type @Derived, @Derived(%T) [symbolic = %Derived (constants.%Derived)] -// CHECK:STDOUT: %ptr: type = ptr_type %Derived [symbolic = %ptr (constants.%ptr.178)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.520)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Derived.as.Destroy.impl.Op.%ptr (%ptr.178)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T) { // CHECK:STDOUT: %T.loc4_21.1 => constants.%T // CHECK:STDOUT: @@ -6333,19 +4518,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete.loc5_29 => constants.%require_complete.4ae // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.87c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %ptr => constants.%ptr.b7c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d4 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Derived(constants.%T) { // CHECK:STDOUT: %T.loc7_15.1 => constants.%T // CHECK:STDOUT: @@ -6396,19 +4568,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete.loc9_30 => constants.%require_complete.6e5 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Derived.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Derived => constants.%Derived -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.87f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Derived.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Derived => constants.%Derived -// CHECK:STDOUT: %ptr => constants.%ptr.178 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.520 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- abstract_generic_undefined.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -6422,13 +4581,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.9f7: type = pattern_type %Base.370 [symbolic] // CHECK:STDOUT: %Base.F.type.f17: type = fn_type @Base.F, @Base(%T) [symbolic] // CHECK:STDOUT: %Base.F.e26: %Base.F.type.f17 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.87c: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.b7c: type = ptr_type %Base.370 [symbolic] -// CHECK:STDOUT: %pattern_type.8d4: type = pattern_type %ptr.b7c [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.F.specific_fn.892: = specific_function %Base.F.e26, @Base.F(%T) [symbolic] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] @@ -6445,11 +4597,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %Derived.F.type: type = fn_type @Derived.F [concrete] // CHECK:STDOUT: %Derived.F: %Derived.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e58: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Derived.vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete] // CHECK:STDOUT: %struct_type.base.fda: type = struct_type {.base: %Base.ea5} [concrete] // CHECK:STDOUT: %complete_type.65a: = complete_type_witness %struct_type.base.fda [concrete] @@ -6457,11 +4604,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -6482,51 +4627,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Base.as.Destroy.impl(@Base.%T.loc4_21.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic = %Base.as.Destroy.impl.Op.type (constants.%Base.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = fn_decl @Base.as.Destroy.impl.Op [symbolic = @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_31.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = value_param call_param0 -// CHECK:STDOUT: %.loc4_31.2: type = splice_block %Self.ref [symbolic = %Base (constants.%Base.370)] { -// CHECK:STDOUT: %.loc4_31.3: type = specific_constant constants.%Base.370, @Base(constants.%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_31.3 [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_21.2: type) { // CHECK:STDOUT: %T.loc4_21.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_21.1 (constants.%T)] // CHECK:STDOUT: @@ -6547,10 +4647,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: @Base.F.%Base (%Base.370) = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base.370 [symbolic = @Base.as.Destroy.impl.%Base (constants.%Base.370)] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Base.as.Destroy.impl(constants.%T) [symbolic = @Base.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.87c)] // CHECK:STDOUT: %Base.F.specific_fn.loc6_1.1: = specific_function %Base.F.decl, @Base.F(constants.%T) [symbolic = %Base.F.specific_fn.loc6_1.2 (constants.%Base.F.specific_fn.892)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] @@ -6578,10 +4674,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] // CHECK:STDOUT: %self: %Derived = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.e58] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Derived.vtable [concrete = constants.%Derived.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.fda [concrete = constants.%complete_type.65a] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -6612,24 +4704,11 @@ class T2(G2:! type) { // CHECK:STDOUT: abstract fn(%self.param: @Base.F.%Base (%Base.370)); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.as.Destroy.impl.Op(@Base.%T.loc4_21.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] -// CHECK:STDOUT: %ptr: type = ptr_type %Base [symbolic = %ptr (constants.%ptr.b7c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8d4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: override fn @Derived.F(%self.param: %Derived) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T) { // CHECK:STDOUT: %T.loc4_21.1 => constants.%T // CHECK:STDOUT: } @@ -6640,19 +4719,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9f7 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.87c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base.370 -// CHECK:STDOUT: %ptr => constants.%ptr.b7c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d4 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T1) { // CHECK:STDOUT: %T.loc4_21.1 => constants.%T1 // CHECK:STDOUT: @@ -6681,13 +4747,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.9f7: type = pattern_type %Base [symbolic] // CHECK:STDOUT: %Base.F.type: type = fn_type @Base.F, @Base(%T) [symbolic] // CHECK:STDOUT: %Base.F: %Base.F.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.b7c: type = ptr_type %Base [symbolic] -// CHECK:STDOUT: %pattern_type.8d4: type = pattern_type %ptr.b7c [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: %Base.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %Base.F.specific_fn: = specific_function %Base.F, @Base.F(%T) [symbolic] // CHECK:STDOUT: %Base.vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete] @@ -6698,11 +4757,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -6719,35 +4776,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Base.as.Destroy.impl(@Base.%T.loc4_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Base.%Destroy.impl_witness_table, @Base.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.type: type = fn_type @Base.as.Destroy.impl.Op, @Base.as.Destroy.impl(%T) [symbolic = %Base.as.Destroy.impl.Op.type (constants.%Base.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Base.as.Destroy.impl.Op: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Base.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Base.as.Destroy.impl.Op.decl: @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.type (%Base.as.Destroy.impl.Op.type) = fn_decl @Base.as.Destroy.impl.Op [symbolic = @Base.as.Destroy.impl.%Base.as.Destroy.impl.Op (constants.%Base.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Base.as.Destroy.impl.Op.%pattern_type (%pattern_type.8d4) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_27.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = value_param call_param0 -// CHECK:STDOUT: %.loc4_27.2: type = splice_block %Self.ref [symbolic = %Base (constants.%Base)] { -// CHECK:STDOUT: %.loc4_27.3: type = specific_constant constants.%Base, @Base(constants.%T) [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_27.3 [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Base.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Base.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_17.2: type) { // CHECK:STDOUT: %T.loc4_17.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] // CHECK:STDOUT: @@ -6768,10 +4796,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: @Base.F.%Base (%Base) = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [symbolic = @Base.as.Destroy.impl.%Base (constants.%Base)] -// CHECK:STDOUT: impl_decl @Base.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Base.as.Destroy.impl.%Base.as.Destroy.impl.Op.decl), @Base.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Base.as.Destroy.impl(constants.%T) [symbolic = @Base.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %Base.F.specific_fn.loc6_1.1: = specific_function %Base.F.decl, @Base.F(constants.%T) [symbolic = %Base.F.specific_fn.loc6_1.2 (constants.%Base.F.specific_fn)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @Base.vtable [concrete = constants.%Base.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type] @@ -6802,17 +4826,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Base.as.Destroy.impl.Op(@Base.%T.loc4_17.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base)] -// CHECK:STDOUT: %ptr: type = ptr_type %Base [symbolic = %ptr (constants.%ptr.b7c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8d4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Base.as.Destroy.impl.Op.%ptr (%ptr.b7c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Base(constants.%T) { // CHECK:STDOUT: %T.loc4_17.1 => constants.%T // CHECK:STDOUT: @@ -6831,19 +4844,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete => constants.%require_complete // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Base.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Base => constants.%Base -// CHECK:STDOUT: %ptr => constants.%ptr.b7c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d4 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- generic_import.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -7006,13 +5006,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.48ecf1.1: type = pattern_type %T1.18aea2.1 [symbolic] // CHECK:STDOUT: %T1.F.type.ebcc3f.1: type = fn_type @T1.F, @T1(%G1) [symbolic] // CHECK:STDOUT: %T1.F.0df085.1: %T1.F.type.ebcc3f.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.508: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%G1) [symbolic] -// CHECK:STDOUT: %ptr.997: type = ptr_type %T1.18aea2.1 [symbolic] -// CHECK:STDOUT: %pattern_type.f06: type = pattern_type %ptr.997 [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%G1) [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %T1.F.specific_fn.1e2a8c.1: = specific_function %T1.F.0df085.1, @T1.F(%G1) [symbolic] // CHECK:STDOUT: %T1.vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete] @@ -7030,11 +5023,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %T1.F.specific_fn.1e2a8c.2: = specific_function %T1.F.0df085.2, @T1.F(%G2) [symbolic] // CHECK:STDOUT: %require_complete.86d019.2: = require_complete_type %T1.18aea2.2 [symbolic] // CHECK:STDOUT: %T2.elem: type = unbound_element_type %T2, %T1.18aea2.2 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.0d9: = impl_witness @T2.%Destroy.impl_witness_table, @T2.as.Destroy.impl(%G2) [symbolic] -// CHECK:STDOUT: %ptr.112: type = ptr_type %T2 [symbolic] -// CHECK:STDOUT: %pattern_type.8f6: type = pattern_type %ptr.112 [symbolic] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.type: type = fn_type @T2.as.Destroy.impl.Op, @T2.as.Destroy.impl(%G2) [symbolic] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op: %T2.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %T2.vtable_decl: ref %ptr.454 = vtable_decl @T2.vtable [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %T1.18aea2.2} [symbolic] // CHECK:STDOUT: %complete_type.987: = complete_type_witness %struct_type.base [symbolic] @@ -7042,11 +5030,9 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -7070,64 +5056,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @T1.as.Destroy.impl(@T1.%G1.loc4_15.2: type) { -// CHECK:STDOUT: %G1: type = bind_symbolic_name G1, 0 [symbolic = %G1 (constants.%G1)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%G1) [symbolic = %T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%G1) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.508)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%G1) [symbolic = %T1.as.Destroy.impl.Op.type (constants.%T1.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = struct_value () [symbolic = %T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = fn_decl @T1.as.Destroy.impl.Op [symbolic = @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_26.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = value_param call_param0 -// CHECK:STDOUT: %.loc4_26.2: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1.18aea2.1)] { -// CHECK:STDOUT: %.loc4_26.3: type = specific_constant constants.%T1.18aea2.1, @T1(constants.%G1) [symbolic = %T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_26.3 [symbolic = %T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @T2.as.Destroy.impl(@T2.%G2.loc8_10.2: type) { -// CHECK:STDOUT: %G2: type = bind_symbolic_name G2, 0 [symbolic = %G2 (constants.%G2)] -// CHECK:STDOUT: %T2: type = class_type @T2, @T2(%G2) [symbolic = %T2 (constants.%T2)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T2.%Destroy.impl_witness_table, @T2.as.Destroy.impl(%G2) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.0d9)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.type: type = fn_type @T2.as.Destroy.impl.Op, @T2.as.Destroy.impl(%G2) [symbolic = %T2.as.Destroy.impl.Op.type (constants.%T2.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op: @T2.as.Destroy.impl.%T2.as.Destroy.impl.Op.type (%T2.as.Destroy.impl.Op.type) = struct_value () [symbolic = %T2.as.Destroy.impl.Op (constants.%T2.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @T2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.decl: @T2.as.Destroy.impl.%T2.as.Destroy.impl.Op.type (%T2.as.Destroy.impl.Op.type) = fn_decl @T2.as.Destroy.impl.Op [symbolic = @T2.as.Destroy.impl.%T2.as.Destroy.impl.Op (constants.%T2.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @T2.as.Destroy.impl.Op.%pattern_type (%pattern_type.8f6) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @T2.as.Destroy.impl.Op.%pattern_type (%pattern_type.8f6) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8_21.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @T2.as.Destroy.impl.Op.%ptr (%ptr.112) = value_param call_param0 -// CHECK:STDOUT: %.loc8_21.2: type = splice_block %Self.ref [symbolic = %T2 (constants.%T2)] { -// CHECK:STDOUT: %.loc8_21.3: type = specific_constant constants.%T2, @T2(constants.%G2) [symbolic = %T2 (constants.%T2)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc8_21.3 [symbolic = %T2 (constants.%T2)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @T2.as.Destroy.impl.Op.%ptr (%ptr.112) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @T1(%G1.loc4_15.2: type) { // CHECK:STDOUT: %G1.loc4_15.1: type = bind_symbolic_name G1, 0 [symbolic = %G1.loc4_15.1 (constants.%G1)] // CHECK:STDOUT: @@ -7148,10 +5076,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: @T1.F.%T1 (%T1.18aea2.1) = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1.18aea2.1 [symbolic = @T1.as.Destroy.impl.%T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @T1.as.Destroy.impl(constants.%G1) [symbolic = @T1.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.508)] // CHECK:STDOUT: %T1.F.specific_fn.loc6_1.1: = specific_function %T1.F.decl, @T1.F(constants.%G1) [symbolic = %T1.F.specific_fn.loc6_1.2 (constants.%T1.F.specific_fn.1e2a8c.1)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete = constants.%T1.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] @@ -7183,10 +5107,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %G2.ref: type = name_ref G2, %G2.loc8_10.2 [symbolic = %G2.loc8_10.1 (constants.%G2)] // CHECK:STDOUT: %T1.loc9_21.1: type = class_type @T1, @T1(constants.%G2) [symbolic = %T1.loc9_21.2 (constants.%T1.18aea2.2)] // CHECK:STDOUT: %.loc9: @T2.%T2.elem (%T2.elem) = base_decl %T1.loc9_21.1, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T2 [symbolic = @T2.as.Destroy.impl.%T2 (constants.%T2)] -// CHECK:STDOUT: impl_decl @T2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T2.as.Destroy.impl.%T2.as.Destroy.impl.Op.decl), @T2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @T2.as.Destroy.impl(constants.%G2) [symbolic = @T2.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.0d9)] // CHECK:STDOUT: %T1.F.specific_fn.loc10_1.1: = specific_function constants.%T1.F.0df085.2, @T1.F(constants.%G2) [symbolic = %T1.F.specific_fn.loc10_1.2 (constants.%T1.F.specific_fn.1e2a8c.2)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @T2.vtable [concrete = constants.%T2.vtable_decl] // CHECK:STDOUT: %complete_type.loc10_1.1: = complete_type_witness constants.%struct_type.base [symbolic = %complete_type.loc10_1.2 (constants.%complete_type.987)] @@ -7224,28 +5144,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @T1.as.Destroy.impl.Op(@T1.%G1.loc4_15.2: type) { -// CHECK:STDOUT: %G1: type = bind_symbolic_name G1, 0 [symbolic = %G1 (constants.%G1)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%G1) [symbolic = %T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: %ptr: type = ptr_type %T1 [symbolic = %ptr (constants.%ptr.997)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.f06)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @T2.as.Destroy.impl.Op(@T2.%G2.loc8_10.2: type) { -// CHECK:STDOUT: %G2: type = bind_symbolic_name G2, 0 [symbolic = %G2 (constants.%G2)] -// CHECK:STDOUT: %T2: type = class_type @T2, @T2(%G2) [symbolic = %T2 (constants.%T2)] -// CHECK:STDOUT: %ptr: type = ptr_type %T2 [symbolic = %ptr (constants.%ptr.112)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8f6)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @T2.as.Destroy.impl.Op.%ptr (%ptr.112)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @T1(constants.%G1) { // CHECK:STDOUT: %G1.loc4_15.1 => constants.%G1 // CHECK:STDOUT: @@ -7264,19 +5162,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete => constants.%require_complete.86d019.1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl(constants.%G1) { -// CHECK:STDOUT: %G1 => constants.%G1 -// CHECK:STDOUT: %T1 => constants.%T1.18aea2.1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.508 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl.Op(constants.%G1) { -// CHECK:STDOUT: %G1 => constants.%G1 -// CHECK:STDOUT: %T1 => constants.%T1.18aea2.1 -// CHECK:STDOUT: %ptr => constants.%ptr.997 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f06 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @T2(constants.%G2) { // CHECK:STDOUT: %G2.loc8_10.1 => constants.%G2 // CHECK:STDOUT: } @@ -7299,19 +5184,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete => constants.%require_complete.86d019.2 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T2.as.Destroy.impl(constants.%G2) { -// CHECK:STDOUT: %G2 => constants.%G2 -// CHECK:STDOUT: %T2 => constants.%T2 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.0d9 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @T2.as.Destroy.impl.Op(constants.%G2) { -// CHECK:STDOUT: %G2 => constants.%G2 -// CHECK:STDOUT: %T2 => constants.%T2 -// CHECK:STDOUT: %ptr => constants.%ptr.112 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8f6 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- generic_derived_generic_context.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -7325,13 +5197,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %pattern_type.48ecf1.1: type = pattern_type %T1.18aea2.1 [symbolic] // CHECK:STDOUT: %T1.F.type.ebcc3f.1: type = fn_type @T1.F, @T1(%G1) [symbolic] // CHECK:STDOUT: %T1.F.0df085.1: %T1.F.type.ebcc3f.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.508: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%G1) [symbolic] -// CHECK:STDOUT: %ptr.997: type = ptr_type %T1.18aea2.1 [symbolic] -// CHECK:STDOUT: %pattern_type.f06: type = pattern_type %ptr.997 [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%G1) [symbolic] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: %T1.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %T1.F.specific_fn.1e2a8c.1: = specific_function %T1.F.0df085.1, @T1.F(%G1) [symbolic] // CHECK:STDOUT: %T1.vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete] @@ -7350,30 +5215,18 @@ class T2(G2:! type) { // CHECK:STDOUT: %T1.F.specific_fn.1e2a8c.2: = specific_function %T1.F.0df085.2, @T1.F(%G2) [symbolic] // CHECK:STDOUT: %require_complete.86d019.2: = require_complete_type %T1.18aea2.2 [symbolic] // CHECK:STDOUT: %T3.elem: type = unbound_element_type %T3, %T1.18aea2.2 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.c13: = impl_witness @T3.%Destroy.impl_witness_table, @T3.as.Destroy.impl(%G2) [symbolic] -// CHECK:STDOUT: %ptr.625: type = ptr_type %T3 [symbolic] -// CHECK:STDOUT: %pattern_type.753: type = pattern_type %ptr.625 [symbolic] -// CHECK:STDOUT: %T3.as.Destroy.impl.Op.type: type = fn_type @T3.as.Destroy.impl.Op, @T3.as.Destroy.impl(%G2) [symbolic] -// CHECK:STDOUT: %T3.as.Destroy.impl.Op: %T3.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %T3.vtable_decl: ref %ptr.454 = vtable_decl @T3.vtable [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %T1.18aea2.2} [symbolic] // CHECK:STDOUT: %complete_type.987: = complete_type_witness %struct_type.base [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.0d9: = impl_witness @T2.%Destroy.impl_witness_table, @T2.as.Destroy.impl(%G2) [symbolic] -// CHECK:STDOUT: %ptr.112: type = ptr_type %T2 [symbolic] -// CHECK:STDOUT: %pattern_type.8f6: type = pattern_type %ptr.112 [symbolic] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.type: type = fn_type @T2.as.Destroy.impl.Op, @T2.as.Destroy.impl(%G2) [symbolic] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op: %T2.as.Destroy.impl.Op.type = 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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -7397,93 +5250,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @T1.as.Destroy.impl(@T1.%G1.loc4_15.2: type) { -// CHECK:STDOUT: %G1: type = bind_symbolic_name G1, 0 [symbolic = %G1 (constants.%G1)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%G1) [symbolic = %T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T1.%Destroy.impl_witness_table, @T1.as.Destroy.impl(%G1) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.508)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.type: type = fn_type @T1.as.Destroy.impl.Op, @T1.as.Destroy.impl(%G1) [symbolic = %T1.as.Destroy.impl.Op.type (constants.%T1.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %T1.as.Destroy.impl.Op: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = struct_value () [symbolic = %T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @T1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T1.as.Destroy.impl.Op.decl: @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.type (%T1.as.Destroy.impl.Op.type) = fn_decl @T1.as.Destroy.impl.Op [symbolic = @T1.as.Destroy.impl.%T1.as.Destroy.impl.Op (constants.%T1.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @T1.as.Destroy.impl.Op.%pattern_type (%pattern_type.f06) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_26.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = value_param call_param0 -// CHECK:STDOUT: %.loc4_26.2: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1.18aea2.1)] { -// CHECK:STDOUT: %.loc4_26.3: type = specific_constant constants.%T1.18aea2.1, @T1(constants.%G1) [symbolic = %T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_26.3 [symbolic = %T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @T1.as.Destroy.impl.Op.%ptr (%ptr.997) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @T3.as.Destroy.impl(@T2.%G2.loc8_10.2: type) { -// CHECK:STDOUT: %G2: type = bind_symbolic_name G2, 0 [symbolic = %G2 (constants.%G2)] -// CHECK:STDOUT: %T3: type = class_type @T3, @T3(%G2) [symbolic = %T3 (constants.%T3)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T3.%Destroy.impl_witness_table, @T3.as.Destroy.impl(%G2) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.c13)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %T3.as.Destroy.impl.Op.type: type = fn_type @T3.as.Destroy.impl.Op, @T3.as.Destroy.impl(%G2) [symbolic = %T3.as.Destroy.impl.Op.type (constants.%T3.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %T3.as.Destroy.impl.Op: @T3.as.Destroy.impl.%T3.as.Destroy.impl.Op.type (%T3.as.Destroy.impl.Op.type) = struct_value () [symbolic = %T3.as.Destroy.impl.Op (constants.%T3.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @T3.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T3.as.Destroy.impl.Op.decl: @T3.as.Destroy.impl.%T3.as.Destroy.impl.Op.type (%T3.as.Destroy.impl.Op.type) = fn_decl @T3.as.Destroy.impl.Op [symbolic = @T3.as.Destroy.impl.%T3.as.Destroy.impl.Op (constants.%T3.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @T3.as.Destroy.impl.Op.%pattern_type (%pattern_type.753) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @T3.as.Destroy.impl.Op.%pattern_type (%pattern_type.753) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9_12.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @T3.as.Destroy.impl.Op.%ptr (%ptr.625) = value_param call_param0 -// CHECK:STDOUT: %.loc9_12.2: type = splice_block %Self.ref [symbolic = %T3 (constants.%T3)] { -// CHECK:STDOUT: %.loc9_12.3: type = specific_constant constants.%T3, @T3(constants.%G2) [symbolic = %T3 (constants.%T3)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc9_12.3 [symbolic = %T3 (constants.%T3)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @T3.as.Destroy.impl.Op.%ptr (%ptr.625) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T3.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T3.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @T2.as.Destroy.impl(@T2.%G2.loc8_10.2: type) { -// CHECK:STDOUT: %G2: type = bind_symbolic_name G2, 0 [symbolic = %G2 (constants.%G2)] -// CHECK:STDOUT: %T2: type = class_type @T2, @T2(%G2) [symbolic = %T2 (constants.%T2)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @T2.%Destroy.impl_witness_table, @T2.as.Destroy.impl(%G2) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.0d9)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.type: type = fn_type @T2.as.Destroy.impl.Op, @T2.as.Destroy.impl(%G2) [symbolic = %T2.as.Destroy.impl.Op.type (constants.%T2.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %T2.as.Destroy.impl.Op: @T2.as.Destroy.impl.%T2.as.Destroy.impl.Op.type (%T2.as.Destroy.impl.Op.type) = struct_value () [symbolic = %T2.as.Destroy.impl.Op (constants.%T2.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @T2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %T2.as.Destroy.impl.Op.decl: @T2.as.Destroy.impl.%T2.as.Destroy.impl.Op.type (%T2.as.Destroy.impl.Op.type) = fn_decl @T2.as.Destroy.impl.Op [symbolic = @T2.as.Destroy.impl.%T2.as.Destroy.impl.Op (constants.%T2.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @T2.as.Destroy.impl.Op.%pattern_type (%pattern_type.8f6) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @T2.as.Destroy.impl.Op.%pattern_type (%pattern_type.8f6) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8_21.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @T2.as.Destroy.impl.Op.%ptr (%ptr.112) = value_param call_param0 -// CHECK:STDOUT: %.loc8_21.2: type = splice_block %Self.ref [symbolic = %T2 (constants.%T2)] { -// CHECK:STDOUT: %.loc8_21.3: type = specific_constant constants.%T2, @T2(constants.%G2) [symbolic = %T2 (constants.%T2)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc8_21.3 [symbolic = %T2 (constants.%T2)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @T2.as.Destroy.impl.Op.%ptr (%ptr.112) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %T2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @T2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @T1(%G1.loc4_15.2: type) { // CHECK:STDOUT: %G1.loc4_15.1: type = bind_symbolic_name G1, 0 [symbolic = %G1.loc4_15.1 (constants.%G1)] // CHECK:STDOUT: @@ -7504,10 +5270,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %self: @T1.F.%T1 (%T1.18aea2.1) = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1.18aea2.1 [symbolic = @T1.as.Destroy.impl.%T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: impl_decl @T1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T1.as.Destroy.impl.%T1.as.Destroy.impl.Op.decl), @T1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @T1.as.Destroy.impl(constants.%G1) [symbolic = @T1.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.508)] // CHECK:STDOUT: %T1.F.specific_fn.loc6_1.1: = specific_function %T1.F.decl, @T1.F(constants.%G1) [symbolic = %T1.F.specific_fn.loc6_1.2 (constants.%T1.F.specific_fn.1e2a8c.1)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @T1.vtable [concrete = constants.%T1.vtable_decl] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.vptr [concrete = constants.%complete_type.513] @@ -7528,10 +5290,6 @@ class T2(G2:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %T3.decl: type = class_decl @T3 [symbolic = @T2.%T3 (constants.%T3)] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T2 [symbolic = @T2.as.Destroy.impl.%T2 (constants.%T2)] -// CHECK:STDOUT: impl_decl @T2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T2.as.Destroy.impl.%T2.as.Destroy.impl.Op.decl), @T2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @T2.as.Destroy.impl(constants.%G2) [symbolic = @T2.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.0d9)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -7561,10 +5319,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %G2.ref: type = name_ref G2, @T2.%G2.loc8_10.2 [symbolic = %G2 (constants.%G2)] // CHECK:STDOUT: %T1.loc10_24.1: type = class_type @T1, @T1(constants.%G2) [symbolic = %T1.loc10_24.2 (constants.%T1.18aea2.2)] // CHECK:STDOUT: %.loc10: @T3.%T3.elem (%T3.elem) = base_decl %T1.loc10_24.1, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T3 [symbolic = @T3.as.Destroy.impl.%T3 (constants.%T3)] -// CHECK:STDOUT: impl_decl @T3.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@T3.as.Destroy.impl.%T3.as.Destroy.impl.Op.decl), @T3.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @T3.as.Destroy.impl(constants.%G2) [symbolic = @T3.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.c13)] // CHECK:STDOUT: %T1.F.specific_fn.loc11_3.1: = specific_function constants.%T1.F.0df085.2, @T1.F(constants.%G2) [symbolic = %T1.F.specific_fn.loc11_3.2 (constants.%T1.F.specific_fn.1e2a8c.2)] // CHECK:STDOUT: %vtable_decl: ref %ptr.454 = vtable_decl @T3.vtable [concrete = constants.%T3.vtable_decl] // CHECK:STDOUT: %complete_type.loc11_3.1: = complete_type_witness constants.%struct_type.base [symbolic = %complete_type.loc11_3.2 (constants.%complete_type.987)] @@ -7602,39 +5356,6 @@ class T2(G2:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @T1.as.Destroy.impl.Op(@T1.%G1.loc4_15.2: type) { -// CHECK:STDOUT: %G1: type = bind_symbolic_name G1, 0 [symbolic = %G1 (constants.%G1)] -// CHECK:STDOUT: %T1: type = class_type @T1, @T1(%G1) [symbolic = %T1 (constants.%T1.18aea2.1)] -// CHECK:STDOUT: %ptr: type = ptr_type %T1 [symbolic = %ptr (constants.%ptr.997)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.f06)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @T1.as.Destroy.impl.Op.%ptr (%ptr.997)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @T3.as.Destroy.impl.Op(@T2.%G2.loc8_10.2: type) { -// CHECK:STDOUT: %G2: type = bind_symbolic_name G2, 0 [symbolic = %G2 (constants.%G2)] -// CHECK:STDOUT: %T3: type = class_type @T3, @T3(%G2) [symbolic = %T3 (constants.%T3)] -// CHECK:STDOUT: %ptr: type = ptr_type %T3 [symbolic = %ptr (constants.%ptr.625)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.753)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @T3.as.Destroy.impl.Op.%ptr (%ptr.625)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @T2.as.Destroy.impl.Op(@T2.%G2.loc8_10.2: type) { -// CHECK:STDOUT: %G2: type = bind_symbolic_name G2, 0 [symbolic = %G2 (constants.%G2)] -// CHECK:STDOUT: %T2: type = class_type @T2, @T2(%G2) [symbolic = %T2 (constants.%T2)] -// CHECK:STDOUT: %ptr: type = ptr_type %T2 [symbolic = %ptr (constants.%ptr.112)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.8f6)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @T2.as.Destroy.impl.Op.%ptr (%ptr.112)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @T1(constants.%G1) { // CHECK:STDOUT: %G1.loc4_15.1 => constants.%G1 // CHECK:STDOUT: @@ -7653,19 +5374,6 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete => constants.%require_complete.86d019.1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl(constants.%G1) { -// CHECK:STDOUT: %G1 => constants.%G1 -// CHECK:STDOUT: %T1 => constants.%T1.18aea2.1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.508 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @T1.as.Destroy.impl.Op(constants.%G1) { -// CHECK:STDOUT: %G1 => constants.%G1 -// CHECK:STDOUT: %T1 => constants.%T1.18aea2.1 -// CHECK:STDOUT: %ptr => constants.%ptr.997 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f06 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @T2(constants.%G2) { // CHECK:STDOUT: %G2.loc8_10.1 => constants.%G2 // CHECK:STDOUT: } @@ -7690,29 +5398,3 @@ class T2(G2:! type) { // CHECK:STDOUT: %require_complete => constants.%require_complete.86d019.2 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T3.as.Destroy.impl(constants.%G2) { -// CHECK:STDOUT: %G2 => constants.%G2 -// CHECK:STDOUT: %T3 => constants.%T3 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.c13 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @T3.as.Destroy.impl.Op(constants.%G2) { -// CHECK:STDOUT: %G2 => constants.%G2 -// CHECK:STDOUT: %T3 => constants.%T3 -// CHECK:STDOUT: %ptr => constants.%ptr.625 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.753 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @T2.as.Destroy.impl(constants.%G2) { -// CHECK:STDOUT: %G2 => constants.%G2 -// CHECK:STDOUT: %T2 => constants.%T2 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.0d9 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @T2.as.Destroy.impl.Op(constants.%G2) { -// CHECK:STDOUT: %G2 => constants.%G2 -// CHECK:STDOUT: %T2 => constants.%T2 -// CHECK:STDOUT: %ptr => constants.%ptr.112 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8f6 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/const/import.carbon b/toolchain/check/testdata/const/import.carbon index 92abbc23f61a..b18dce34aa3a 100644 --- a/toolchain/check/testdata/const/import.carbon +++ b/toolchain/check/testdata/const/import.carbon @@ -33,12 +33,12 @@ var a_ptr: const C* = a_ptr_ref; // CHECK:STDOUT: --- implicit.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Copy.Op.type: type = fn_type @Copy.Op [concrete] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.222: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.8b3) [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.3ef: %ptr.as.Copy.impl.Op.type.222 = struct_value () [symbolic] +// CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %const.668: type = const_type %C [concrete] // CHECK:STDOUT: %ptr.801: type = ptr_type %const.668 [concrete] // CHECK:STDOUT: %pattern_type.c0d: type = pattern_type %ptr.801 [concrete] @@ -58,7 +58,7 @@ var a_ptr: const C* = a_ptr_ref; // CHECK:STDOUT: %Main.C: type = import_ref Main//implicit, C, loaded [concrete = constants.%C] // CHECK:STDOUT: %Main.a_ref: ref %const.668 = import_ref Main//implicit, a_ref, loaded [concrete = %a_ref.var] // CHECK:STDOUT: %Main.a_ptr_ref: ref %ptr.801 = import_ref Main//implicit, a_ptr_ref, loaded [concrete = %a_ptr_ref.var] -// CHECK:STDOUT: %Main.import_ref.790: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.222) = import_ref Main//implicit, inst193 [indirect], loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.3ef)] +// CHECK:STDOUT: %Main.import_ref.790: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.222) = import_ref Main//implicit, inst154 [indirect], loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.3ef)] // CHECK:STDOUT: %Copy.impl_witness_table.573 = impl_witness_table (%Main.import_ref.790), @ptr.as.Copy.impl [concrete] // CHECK:STDOUT: %a_ref.patt: %pattern_type.6af = binding_pattern a_ref [concrete] // CHECK:STDOUT: %a_ref.var_patt: %pattern_type.6af = var_pattern %a_ref.patt [concrete] diff --git a/toolchain/check/testdata/deduce/array.carbon b/toolchain/check/testdata/deduce/array.carbon index 16685a4634c5..9b33a86587d8 100644 --- a/toolchain/check/testdata/deduce/array.carbon +++ b/toolchain/check/testdata/deduce/array.carbon @@ -129,14 +129,6 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -148,6 +140,7 @@ fn G() -> i32 { // CHECK:STDOUT: %pattern_type.58b: type = pattern_type %array_type.743 [symbolic] // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %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] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %require_complete.06f: = require_complete_type %array_type.743 [symbolic] @@ -165,6 +158,7 @@ fn G() -> i32 { // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array: %array_type.002 = tuple_value (%C.val, %C.val, %C.val) [concrete] // CHECK:STDOUT: %F.specific_fn.04a: = specific_function %F, @F(%C) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %facet_value: %type_where = facet_value %array_type.002, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.0fd: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] @@ -221,27 +215,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -249,8 +223,6 @@ fn G() -> i32 { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.2: type) { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] // CHECK:STDOUT: %array_type.loc6_29.1: type = array_type constants.%int_3, %T.loc6_6.1 [symbolic = %array_type.loc6_29.1 (constants.%array_type.743)] @@ -349,14 +321,6 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -369,6 +333,7 @@ fn G() -> i32 { // CHECK:STDOUT: %pattern_type.9ee: type = pattern_type %array_type.6a2 [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] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] @@ -404,6 +369,7 @@ fn G() -> i32 { // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array: %array_type.002 = tuple_value (%C.val, %C.val, %C.val) [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: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %facet_value: %type_where = facet_value %array_type.002, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.0fd: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] @@ -417,19 +383,19 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .IntLiteral = %Core.IntLiteral // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// 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.IntLiteral: %IntLiteral.type = import_ref Core//prelude/parts/int_literal, IntLiteral, loaded [concrete = constants.%IntLiteral] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -480,27 +446,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -508,8 +454,6 @@ fn G() -> i32 { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc6_6.2: Core.IntLiteral) { // CHECK:STDOUT: %N.loc6_6.1: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc6_6.1 (constants.%N)] // CHECK:STDOUT: %array_type.loc6_42.1: type = array_type %N.loc6_6.1, constants.%C [symbolic = %array_type.loc6_42.1 (constants.%array_type.6a2)] @@ -603,14 +547,6 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -624,6 +560,7 @@ fn G() -> i32 { // CHECK:STDOUT: %array_type.bb5: type = array_type %N, %T [symbolic] // CHECK:STDOUT: %pattern_type.261: type = pattern_type %array_type.bb5 [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.ec9: = require_complete_type %array_type.bb5 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -639,6 +576,7 @@ fn G() -> i32 { // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array: %array_type.002 = tuple_value (%C.val, %C.val, %C.val) [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: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %facet_value: %type_where = facet_value %array_type.002, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.0fd: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] @@ -649,13 +587,13 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .IntLiteral = %Core.IntLiteral +// 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.IntLiteral: %IntLiteral.type = import_ref Core//prelude/parts/int_literal, IntLiteral, loaded [concrete = constants.%IntLiteral] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -695,27 +633,7 @@ fn G() -> i32 { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -723,8 +641,6 @@ fn G() -> i32 { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.2: type, %N.loc6_16.2: Core.IntLiteral) { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] // CHECK:STDOUT: %N.loc6_16.1: Core.IntLiteral = bind_symbolic_name N, 1 [symbolic = %N.loc6_16.1 (constants.%N)] @@ -808,14 +724,6 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -827,6 +735,7 @@ fn G() -> i32 { // CHECK:STDOUT: %pattern_type.a4c: type = pattern_type %array_type.9d4 [symbolic] // CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %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] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %require_complete.d11: = require_complete_type %array_type.9d4 [symbolic] @@ -848,6 +757,7 @@ fn G() -> i32 { // CHECK:STDOUT: %F.specific_fn.04a: = specific_function %F, @F(%C) [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %facet_value: %type_where = facet_value %array_type.002, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.0fd: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] @@ -858,13 +768,13 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// 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.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -906,27 +816,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -934,8 +824,6 @@ fn G() -> i32 { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.2: type) { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] // CHECK:STDOUT: %array_type.loc6_29.1: type = array_type constants.%int_2, %T.loc6_6.1 [symbolic = %array_type.loc6_29.1 (constants.%array_type.9d4)] @@ -1034,22 +922,9 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] @@ -1060,6 +935,7 @@ fn G() -> i32 { // CHECK:STDOUT: %pattern_type.9ee: type = pattern_type %array_type.6a2 [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] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] @@ -1097,6 +973,7 @@ fn G() -> i32 { // CHECK:STDOUT: %array_type.002: type = array_type %int_3.1ba, %C [concrete] // CHECK:STDOUT: %pattern_type.a63: type = pattern_type %array_type.002 [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: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %facet_value: %type_where = facet_value %array_type.fe4, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.9be: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] @@ -1110,19 +987,19 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .IntLiteral = %Core.IntLiteral // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// 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.IntLiteral: %IntLiteral.type = import_ref Core//prelude/parts/int_literal, IntLiteral, loaded [concrete = constants.%IntLiteral] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -1175,43 +1052,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1220,10 +1061,6 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1231,10 +1068,6 @@ fn G() -> i32 { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc7_6.2: Core.IntLiteral) { // CHECK:STDOUT: %N.loc7_6.1: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc7_6.1 (constants.%N)] // CHECK:STDOUT: %array_type.loc7_42.1: type = array_type %N.loc7_6.1, constants.%C [symbolic = %array_type.loc7_42.1 (constants.%array_type.6a2)] @@ -1328,20 +1161,13 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // 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] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %N.c80: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] @@ -1392,6 +1218,7 @@ fn G() -> i32 { // 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.002 = tuple_value (%C.val, %C.val, %C.val) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %facet_value: %type_where = facet_value %array_type.002, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.0fd: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] @@ -1401,14 +1228,13 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.25c: @Int.as.ImplicitAs.impl.%Int.as.ImplicitAs.impl.Convert.type (%Int.as.ImplicitAs.impl.Convert.type.543) = import_ref Core//prelude/parts/int, loc27_44, loaded [symbolic = @Int.as.ImplicitAs.impl.%Int.as.ImplicitAs.impl.Convert (constants.%Int.as.ImplicitAs.impl.Convert.c08)] @@ -1416,6 +1242,7 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -1470,27 +1297,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1498,8 +1305,6 @@ fn G() -> i32 { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc6_6.2: %i32) { // CHECK:STDOUT: %N.loc6_6.1: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc6_6.1 (constants.%N.51e)] // CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound: = bound_method %N.loc6_6.1, constants.%Int.as.ImplicitAs.impl.Convert.b09 [symbolic = %Int.as.ImplicitAs.impl.Convert.bound (constants.%Int.as.ImplicitAs.impl.Convert.bound)] diff --git a/toolchain/check/testdata/deduce/binding_pattern.carbon b/toolchain/check/testdata/deduce/binding_pattern.carbon index babcc1af261d..1b6b6147b4d6 100644 --- a/toolchain/check/testdata/deduce/binding_pattern.carbon +++ b/toolchain/check/testdata/deduce/binding_pattern.carbon @@ -71,13 +71,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %C.Create.type.f31: type = fn_type @C.Create, @C(%T) [symbolic] // CHECK:STDOUT: %C.Create.cc8: %C.Create.type.f31 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -107,12 +100,10 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//prelude/parts/as, loc17_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%ImplicitAs.Convert.type (%ImplicitAs.Convert.type.275) = import_ref Core//prelude/parts/as, loc17_35, loaded [symbolic = @ImplicitAs.%ImplicitAs.Convert (constants.%ImplicitAs.Convert.42e)] @@ -143,35 +134,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc4_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc4_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.2: type) { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: @@ -188,10 +150,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: %T.ref: type = name_ref T, @C.%T.loc4_9.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %value: @C.Create.%T (%T) = bind_name value, %value.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -215,17 +173,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%U.loc8_6.2: type, %V.loc8_16.2: type) { // CHECK:STDOUT: %U.loc8_6.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc8_6.1 (constants.%U)] // CHECK:STDOUT: %V.loc8_16.1: type = bind_symbolic_name V, 1 [symbolic = %V.loc8_16.1 (constants.%V)] @@ -273,19 +220,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%U, constants.%V) { // CHECK:STDOUT: %U.loc8_6.1 => constants.%U // CHECK:STDOUT: %V.loc8_16.1 => constants.%V @@ -321,13 +255,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %C.Create.type.f31: type = fn_type @C.Create, @C(%T) [symbolic] // CHECK:STDOUT: %C.Create.cc8: %C.Create.type.f31 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -362,12 +289,10 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//prelude/parts/as, loc17_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%ImplicitAs.Convert.type (%ImplicitAs.Convert.type.275) = import_ref Core//prelude/parts/as, loc17_35, loaded [symbolic = @ImplicitAs.%ImplicitAs.Convert (constants.%ImplicitAs.Convert.42e)] @@ -411,35 +336,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc4_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc4_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.2: type) { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: @@ -456,10 +352,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: %T.ref: type = name_ref T, @C.%T.loc4_9.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %value: @C.Create.%T (%T) = bind_name value, %value.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -483,17 +375,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%U.loc9_6.2: type, %V.loc9_16.2: %type_where) { // CHECK:STDOUT: %U.loc9_6.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc9_6.1 (constants.%U)] // CHECK:STDOUT: %V.loc9_16.1: %type_where = bind_symbolic_name V, 1 [symbolic = %V.loc9_16.1 (constants.%V)] @@ -544,19 +425,6 @@ fn F(U:! type, V:! type where {} impls Core.ImplicitAs(.Self)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%U, constants.%V) { // CHECK:STDOUT: %U.loc9_6.1 => constants.%U // CHECK:STDOUT: %V.loc9_16.1 => constants.%V diff --git a/toolchain/check/testdata/deduce/generic_type.carbon b/toolchain/check/testdata/deduce/generic_type.carbon index 90ef651cd272..dedd67d6cf85 100644 --- a/toolchain/check/testdata/deduce/generic_type.carbon +++ b/toolchain/check/testdata/deduce/generic_type.carbon @@ -79,21 +79,9 @@ fn G() -> i32 { // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.4c2: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.e5e: type = pattern_type %C.f2e [symbolic] // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -111,11 +99,9 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -173,61 +159,12 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc4_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc4_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.2: type) { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -237,10 +174,6 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -248,19 +181,6 @@ fn G() -> i32 { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_6.2: type) { // CHECK:STDOUT: %T.loc7_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.1 (constants.%T)] // CHECK:STDOUT: %C.loc7_22.1: type = class_type @C, @C(%T.loc7_6.1) [symbolic = %C.loc7_22.1 (constants.%C.f2e)] @@ -299,19 +219,6 @@ fn G() -> i32 { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.4c2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc7_6.1 => constants.%T // CHECK:STDOUT: %C.loc7_22.1 => constants.%C.f2e @@ -352,21 +259,9 @@ fn G() -> i32 { // CHECK:STDOUT: %I.type: type = generic_class_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type = struct_value () [concrete] // CHECK:STDOUT: %I.ff1: type = class_type @I, @I(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.567: = impl_witness @I.%Destroy.impl_witness_table, @I.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.22f: type = ptr_type %I.ff1 [symbolic] -// CHECK:STDOUT: %pattern_type.b10: type = pattern_type %ptr.22f [symbolic] -// CHECK:STDOUT: %I.as.Destroy.impl.Op.type: type = fn_type @I.as.Destroy.impl.Op, @I.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %I.as.Destroy.impl.Op: %I.as.Destroy.impl.Op.type = 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: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.576: type = pattern_type %I.ff1 [symbolic] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -382,11 +277,9 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -444,61 +337,12 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @I.as.Destroy.impl(@I.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %I: type = class_type @I, @I(%T) [symbolic = %I (constants.%I.ff1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @I.%Destroy.impl_witness_table, @I.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.567)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %I.as.Destroy.impl.Op.type: type = fn_type @I.as.Destroy.impl.Op, @I.as.Destroy.impl(%T) [symbolic = %I.as.Destroy.impl.Op.type (constants.%I.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %I.as.Destroy.impl.Op: @I.as.Destroy.impl.%I.as.Destroy.impl.Op.type (%I.as.Destroy.impl.Op.type) = struct_value () [symbolic = %I.as.Destroy.impl.Op (constants.%I.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @I.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %I.as.Destroy.impl.Op.decl: @I.as.Destroy.impl.%I.as.Destroy.impl.Op.type (%I.as.Destroy.impl.Op.type) = fn_decl @I.as.Destroy.impl.Op [symbolic = @I.as.Destroy.impl.%I.as.Destroy.impl.Op (constants.%I.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @I.as.Destroy.impl.Op.%pattern_type (%pattern_type.b10) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @I.as.Destroy.impl.Op.%pattern_type (%pattern_type.b10) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @I.as.Destroy.impl.Op.%ptr (%ptr.22f) = value_param call_param0 -// CHECK:STDOUT: %.loc4_19.2: type = splice_block %Self.ref [symbolic = %I (constants.%I.ff1)] { -// CHECK:STDOUT: %.loc4_19.3: type = specific_constant constants.%I.ff1, @I(constants.%T) [symbolic = %I (constants.%I.ff1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_19.3 [symbolic = %I (constants.%I.ff1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @I.as.Destroy.impl.Op.%ptr (%ptr.22f) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %I.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @I.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @I(%T.loc4_9.2: type) { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%I.ff1 [symbolic = @I.as.Destroy.impl.%I (constants.%I.ff1)] -// CHECK:STDOUT: impl_decl @I.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@I.as.Destroy.impl.%I.as.Destroy.impl.Op.decl), @I.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @I.as.Destroy.impl(constants.%T) [symbolic = @I.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.567)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -508,10 +352,6 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -519,19 +359,6 @@ fn G() -> i32 { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @I.as.Destroy.impl.Op(@I.%T.loc4_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %I: type = class_type @I, @I(%T) [symbolic = %I (constants.%I.ff1)] -// CHECK:STDOUT: %ptr: type = ptr_type %I [symbolic = %ptr (constants.%ptr.22f)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.b10)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @I.as.Destroy.impl.Op.%ptr (%ptr.22f)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_6.2: type) { // CHECK:STDOUT: %T.loc7_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.1 (constants.%T)] // CHECK:STDOUT: %I.loc7_22.1: type = class_type @I, @I(%T.loc7_6.1) [symbolic = %I.loc7_22.1 (constants.%I.ff1)] @@ -568,19 +395,6 @@ fn G() -> i32 { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @I.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %I => constants.%I.ff1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.567 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @I.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %I => constants.%I.ff1 -// CHECK:STDOUT: %ptr => constants.%ptr.22f -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b10 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc7_6.1 => constants.%T // CHECK:STDOUT: %I.loc7_22.1 => constants.%I.ff1 @@ -621,32 +435,10 @@ fn G() -> i32 { // CHECK:STDOUT: %Inner.type.eae: type = generic_class_type @Inner, @Outer(%T) [symbolic] // CHECK:STDOUT: %Inner.generic.137: %Inner.type.eae = struct_value () [symbolic] // CHECK:STDOUT: %Inner.c71: type = class_type @Inner, @Inner(%T, %U) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7f3: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%T, %U) [symbolic] -// CHECK:STDOUT: %ptr.276: type = ptr_type %Inner.c71 [symbolic] -// CHECK:STDOUT: %pattern_type.01f: type = pattern_type %ptr.276 [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%T, %U) [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: %Inner.as.Destroy.impl.Op.type = 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: %Destroy.impl_witness.52f: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.6ff: type = ptr_type %Outer.9d6 [symbolic] -// CHECK:STDOUT: %pattern_type.07e: type = pattern_type %ptr.6ff [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.127: = require_complete_type %Outer.9d6 [symbolic] // CHECK:STDOUT: %pattern_type.372: type = pattern_type %Inner.c71 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] @@ -672,11 +464,9 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -753,97 +543,6 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Inner.as.Destroy.impl(@Outer.%T.loc4_13.2: type, @Inner.%U.loc5_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T, %U) [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%T, %U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.7f3)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%T, %U) [symbolic = %Inner.as.Destroy.impl.Op.type (constants.%Inner.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Inner.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.decl: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type) = fn_decl @Inner.as.Destroy.impl.Op [symbolic = @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.01f) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.01f) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_25.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.276) = value_param call_param0 -// CHECK:STDOUT: %.loc5_25.2: type = splice_block %Self.ref [symbolic = %Inner (constants.%Inner.c71)] { -// CHECK:STDOUT: %.loc5_25.3: type = specific_constant constants.%Inner.c71, @Inner(constants.%T, constants.%U) [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_25.3 [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Inner.as.Destroy.impl.Op.%ptr (%ptr.276) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Inner.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Inner.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Outer.as.Destroy.impl(@Outer.%T.loc4_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.52f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%T) [symbolic = %Outer.as.Destroy.impl.Op.type (constants.%Outer.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = fn_decl @Outer.as.Destroy.impl.Op [symbolic = @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = value_param call_param0 -// CHECK:STDOUT: %.loc4_23.2: type = splice_block %Self.ref [symbolic = %Outer (constants.%Outer.9d6)] { -// CHECK:STDOUT: %.loc4_23.3: type = specific_constant constants.%Outer.9d6, @Outer(constants.%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_23.3 [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.2: type) { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.1 (constants.%T)] // CHECK:STDOUT: @@ -858,10 +557,6 @@ fn G() -> i32 { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %U.loc5_15.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc5_15.1 (constants.%U)] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer.9d6 [symbolic = @Outer.as.Destroy.impl.%Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Outer.as.Destroy.impl(constants.%T) [symbolic = @Outer.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.52f)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -877,10 +572,6 @@ fn G() -> i32 { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner.c71 [symbolic = @Inner.as.Destroy.impl.%Inner (constants.%Inner.c71)] -// CHECK:STDOUT: impl_decl @Inner.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.decl), @Inner.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Inner.as.Destroy.impl(constants.%T, constants.%U) [symbolic = @Inner.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.7f3)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -890,10 +581,6 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -902,10 +589,6 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -913,33 +596,6 @@ fn G() -> i32 { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Inner.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: type, @Inner.%U.loc5_15.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T, %U) [symbolic = %Inner (constants.%Inner.c71)] -// CHECK:STDOUT: %ptr: type = ptr_type %Inner [symbolic = %ptr (constants.%ptr.276)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.01f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.276)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Outer.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%T) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %ptr: type = ptr_type %Outer [symbolic = %ptr (constants.%ptr.6ff)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.07e)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc13_6.2: type, %U.loc13_16.2: type) { // CHECK:STDOUT: %T.loc13_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc13_6.1 (constants.%T)] // CHECK:STDOUT: %U.loc13_16.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc13_16.1 (constants.%U)] @@ -992,34 +648,6 @@ fn G() -> i32 { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl(constants.%T, constants.%U) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %Inner => constants.%Inner.c71 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.7f3 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl.Op(constants.%T, constants.%U) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %Inner => constants.%Inner.c71 -// CHECK:STDOUT: %ptr => constants.%ptr.276 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.01f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.52f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %ptr => constants.%ptr.6ff -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.07e -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T, constants.%U) { // CHECK:STDOUT: %T.loc13_6.1 => constants.%T // CHECK:STDOUT: %U.loc13_16.1 => constants.%U @@ -1086,13 +714,6 @@ fn G() -> i32 { // CHECK:STDOUT: %WithNontype.type: type = generic_class_type @WithNontype [concrete] // CHECK:STDOUT: %WithNontype.generic: %WithNontype.type = struct_value () [concrete] // CHECK:STDOUT: %WithNontype.8a6: type = class_type @WithNontype, @WithNontype(%N.51e) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d9f: = impl_witness @WithNontype.%Destroy.impl_witness_table, @WithNontype.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %ptr.95c: type = ptr_type %WithNontype.8a6 [symbolic] -// CHECK:STDOUT: %pattern_type.c81: type = pattern_type %ptr.95c [symbolic] -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.type.556: type = fn_type @WithNontype.as.Destroy.impl.Op, @WithNontype.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.fa2: %WithNontype.as.Destroy.impl.Op.type.556 = 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: %pattern_type.48f: type = pattern_type %WithNontype.8a6 [symbolic] @@ -1134,12 +755,13 @@ fn G() -> i32 { // CHECK:STDOUT: %WithNontype.val: %WithNontype.b82 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.b66: type = pattern_type %WithNontype.b82 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_0.6a9) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.a40: = impl_witness @WithNontype.%Destroy.impl_witness_table, @WithNontype.as.Destroy.impl(%int_0.6a9) [concrete] -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.type.7d3: type = fn_type @WithNontype.as.Destroy.impl.Op, @WithNontype.as.Destroy.impl(%int_0.6a9) [concrete] -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.c83: %WithNontype.as.Destroy.impl.Op.type.7d3 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %WithNontype.b82, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.058: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.c50: %AggregateT.as_type.as.Destroy.impl.Op.type.058 = struct_value () [concrete] // CHECK:STDOUT: %ptr.791: type = ptr_type %WithNontype.b82 [concrete] -// CHECK:STDOUT: %pattern_type.7a7: type = pattern_type %ptr.791 [concrete] -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.specific_fn: = specific_function %WithNontype.as.Destroy.impl.Op.c83, @WithNontype.as.Destroy.impl.Op(%int_0.6a9) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.c50, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound.894: = bound_method %int_0.6a9, %Int.as.Copy.impl.Op.f59 [concrete] // CHECK:STDOUT: %bound_method.84d: = bound_method %int_0.6a9, %Int.as.Copy.impl.Op.specific_fn [concrete] // CHECK:STDOUT: } @@ -1147,20 +769,20 @@ fn G() -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -1217,45 +839,12 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @WithNontype.as.Destroy.impl(@WithNontype.%N.loc4_19.2: %i32) { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %WithNontype: type = class_type @WithNontype, @WithNontype(%N) [symbolic = %WithNontype (constants.%WithNontype.8a6)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @WithNontype.%Destroy.impl_witness_table, @WithNontype.as.Destroy.impl(%N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.d9f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.type: type = fn_type @WithNontype.as.Destroy.impl.Op, @WithNontype.as.Destroy.impl(%N) [symbolic = %WithNontype.as.Destroy.impl.Op.type (constants.%WithNontype.as.Destroy.impl.Op.type.556)] -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op: @WithNontype.as.Destroy.impl.%WithNontype.as.Destroy.impl.Op.type (%WithNontype.as.Destroy.impl.Op.type.556) = struct_value () [symbolic = %WithNontype.as.Destroy.impl.Op (constants.%WithNontype.as.Destroy.impl.Op.fa2)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @WithNontype.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.decl: @WithNontype.as.Destroy.impl.%WithNontype.as.Destroy.impl.Op.type (%WithNontype.as.Destroy.impl.Op.type.556) = fn_decl @WithNontype.as.Destroy.impl.Op [symbolic = @WithNontype.as.Destroy.impl.%WithNontype.as.Destroy.impl.Op (constants.%WithNontype.as.Destroy.impl.Op.fa2)] { -// CHECK:STDOUT: %self.patt: @WithNontype.as.Destroy.impl.Op.%pattern_type (%pattern_type.c81) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @WithNontype.as.Destroy.impl.Op.%pattern_type (%pattern_type.c81) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_28.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @WithNontype.as.Destroy.impl.Op.%ptr (%ptr.95c) = value_param call_param0 -// CHECK:STDOUT: %.loc4_28.2: type = splice_block %Self.ref [symbolic = %WithNontype (constants.%WithNontype.8a6)] { -// CHECK:STDOUT: %.loc4_28.3: type = specific_constant constants.%WithNontype.8a6, @WithNontype(constants.%N.51e) [symbolic = %WithNontype (constants.%WithNontype.8a6)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_28.3 [symbolic = %WithNontype (constants.%WithNontype.8a6)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @WithNontype.as.Destroy.impl.Op.%ptr (%ptr.95c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %WithNontype.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @WithNontype.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @WithNontype(%N.loc4_19.2: %i32) { // CHECK:STDOUT: %N.loc4_19.1: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc4_19.1 (constants.%N.51e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%WithNontype.8a6 [symbolic = @WithNontype.as.Destroy.impl.%WithNontype (constants.%WithNontype.8a6)] -// CHECK:STDOUT: impl_decl @WithNontype.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@WithNontype.as.Destroy.impl.%WithNontype.as.Destroy.impl.Op.decl), @WithNontype.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @WithNontype.as.Destroy.impl(constants.%N.51e) [symbolic = @WithNontype.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.d9f)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1264,17 +853,6 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @WithNontype.as.Destroy.impl.Op(@WithNontype.%N.loc4_19.2: %i32) { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %WithNontype: type = class_type @WithNontype, @WithNontype(%N) [symbolic = %WithNontype (constants.%WithNontype.8a6)] -// CHECK:STDOUT: %ptr: type = ptr_type %WithNontype [symbolic = %ptr (constants.%ptr.95c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.c81)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @WithNontype.as.Destroy.impl.Op.%ptr (%ptr.95c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc6_6.2: %i32) { // CHECK:STDOUT: %N.loc6_6.1: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc6_6.1 (constants.%N.51e)] // CHECK:STDOUT: %WithNontype.loc6_31.1: type = class_type @WithNontype, @WithNontype(%N.loc6_6.1) [symbolic = %WithNontype.loc6_31.1 (constants.%WithNontype.8a6)] @@ -1318,11 +896,13 @@ fn G() -> i32 { // CHECK:STDOUT: %F.specific_fn: = specific_function %F.ref, @F(constants.%int_0.6a9) [concrete = constants.%F.specific_fn] // CHECK:STDOUT: %.loc9_15.2: %WithNontype.b82 = bind_value %.loc9_15.1 // CHECK:STDOUT: %F.call: init %i32 = call %F.specific_fn(%.loc9_15.2) -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.bound: = bound_method %.loc9_13.4, constants.%WithNontype.as.Destroy.impl.Op.c83 -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.specific_fn: = specific_function constants.%WithNontype.as.Destroy.impl.Op.c83, @WithNontype.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%WithNontype.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_13: = bound_method %.loc9_13.4, %WithNontype.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%WithNontype.b82, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc9_13.5: %type_where = converted constants.%WithNontype.b82, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc9_13.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.c50 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.c50, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc9_13: = bound_method %.loc9_13.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.791 = addr_of %.loc9_13.4 -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc9_13(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc9_13(%addr) // CHECK:STDOUT: return %F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1332,19 +912,6 @@ fn G() -> i32 { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @WithNontype.as.Destroy.impl(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %WithNontype => constants.%WithNontype.8a6 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.d9f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @WithNontype.as.Destroy.impl.Op(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %WithNontype => constants.%WithNontype.8a6 -// CHECK:STDOUT: %ptr => constants.%ptr.95c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c81 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N.51e) { // CHECK:STDOUT: %N.loc6_6.1 => constants.%N.51e // CHECK:STDOUT: %WithNontype.loc6_31.1 => constants.%WithNontype.8a6 @@ -1368,20 +935,3 @@ fn G() -> i32 { // CHECK:STDOUT: %bound_method.loc6_50.3 => constants.%bound_method.84d // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @WithNontype.as.Destroy.impl(constants.%int_0.6a9) { -// CHECK:STDOUT: %N => constants.%int_0.6a9 -// CHECK:STDOUT: %WithNontype => constants.%WithNontype.b82 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.a40 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op.type => constants.%WithNontype.as.Destroy.impl.Op.type.7d3 -// CHECK:STDOUT: %WithNontype.as.Destroy.impl.Op => constants.%WithNontype.as.Destroy.impl.Op.c83 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @WithNontype.as.Destroy.impl.Op(constants.%int_0.6a9) { -// CHECK:STDOUT: %N => constants.%int_0.6a9 -// CHECK:STDOUT: %WithNontype => constants.%WithNontype.b82 -// CHECK:STDOUT: %ptr => constants.%ptr.791 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7a7 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/deduce/tuple.carbon b/toolchain/check/testdata/deduce/tuple.carbon index 27eeac9d26fb..c3f935811800 100644 --- a/toolchain/check/testdata/deduce/tuple.carbon +++ b/toolchain/check/testdata/deduce/tuple.carbon @@ -61,21 +61,9 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] @@ -101,11 +89,9 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -163,43 +149,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -208,10 +158,6 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -219,10 +165,6 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_6.2: type, %U.loc7_16.2: type) { // CHECK:STDOUT: %T.loc7_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.1 (constants.%T)] // CHECK:STDOUT: %U.loc7_16.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc7_16.1 (constants.%U)] @@ -299,13 +241,6 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %HasPair.type: type = generic_class_type @HasPair [concrete] // CHECK:STDOUT: %HasPair.generic: %HasPair.type = struct_value () [concrete] // CHECK:STDOUT: %HasPair.920: type = class_type @HasPair, @HasPair(%Pair) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @HasPair.%Destroy.impl_witness_table, @HasPair.as.Destroy.impl(%Pair) [symbolic] -// CHECK:STDOUT: %ptr.c3d: type = ptr_type %HasPair.920 [symbolic] -// CHECK:STDOUT: %pattern_type.ba5: type = pattern_type %ptr.c3d [symbolic] -// CHECK:STDOUT: %HasPair.as.Destroy.impl.Op.type: type = fn_type @HasPair.as.Destroy.impl.Op, @HasPair.as.Destroy.impl(%Pair) [symbolic] -// CHECK:STDOUT: %HasPair.as.Destroy.impl.Op: %HasPair.as.Destroy.impl.Op.type = 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: %A: %i32 = bind_symbolic_name A, 0 [symbolic] @@ -364,14 +299,12 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %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.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] @@ -476,45 +409,12 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @HasPair.as.Destroy.impl(@HasPair.%Pair.loc4_15.2: %tuple.type.d07) { -// CHECK:STDOUT: %Pair: %tuple.type.d07 = bind_symbolic_name Pair, 0 [symbolic = %Pair (constants.%Pair)] -// CHECK:STDOUT: %HasPair: type = class_type @HasPair, @HasPair(%Pair) [symbolic = %HasPair (constants.%HasPair.920)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @HasPair.%Destroy.impl_witness_table, @HasPair.as.Destroy.impl(%Pair) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %HasPair.as.Destroy.impl.Op.type: type = fn_type @HasPair.as.Destroy.impl.Op, @HasPair.as.Destroy.impl(%Pair) [symbolic = %HasPair.as.Destroy.impl.Op.type (constants.%HasPair.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %HasPair.as.Destroy.impl.Op: @HasPair.as.Destroy.impl.%HasPair.as.Destroy.impl.Op.type (%HasPair.as.Destroy.impl.Op.type) = struct_value () [symbolic = %HasPair.as.Destroy.impl.Op (constants.%HasPair.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @HasPair.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %HasPair.as.Destroy.impl.Op.decl: @HasPair.as.Destroy.impl.%HasPair.as.Destroy.impl.Op.type (%HasPair.as.Destroy.impl.Op.type) = fn_decl @HasPair.as.Destroy.impl.Op [symbolic = @HasPair.as.Destroy.impl.%HasPair.as.Destroy.impl.Op (constants.%HasPair.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @HasPair.as.Destroy.impl.Op.%pattern_type (%pattern_type.ba5) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @HasPair.as.Destroy.impl.Op.%pattern_type (%pattern_type.ba5) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_34.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @HasPair.as.Destroy.impl.Op.%ptr (%ptr.c3d) = value_param call_param0 -// CHECK:STDOUT: %.loc4_34.2: type = splice_block %Self.ref [symbolic = %HasPair (constants.%HasPair.920)] { -// CHECK:STDOUT: %.loc4_34.3: type = specific_constant constants.%HasPair.920, @HasPair(constants.%Pair) [symbolic = %HasPair (constants.%HasPair.920)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_34.3 [symbolic = %HasPair (constants.%HasPair.920)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @HasPair.as.Destroy.impl.Op.%ptr (%ptr.c3d) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %HasPair.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @HasPair.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @HasPair(%Pair.loc4_15.2: %tuple.type.d07) { // CHECK:STDOUT: %Pair.loc4_15.1: %tuple.type.d07 = bind_symbolic_name Pair, 0 [symbolic = %Pair.loc4_15.1 (constants.%Pair)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%HasPair.920 [symbolic = @HasPair.as.Destroy.impl.%HasPair (constants.%HasPair.920)] -// CHECK:STDOUT: impl_decl @HasPair.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@HasPair.as.Destroy.impl.%HasPair.as.Destroy.impl.Op.decl), @HasPair.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @HasPair.as.Destroy.impl(constants.%Pair) [symbolic = @HasPair.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -523,17 +423,6 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @HasPair.as.Destroy.impl.Op(@HasPair.%Pair.loc4_15.2: %tuple.type.d07) { -// CHECK:STDOUT: %Pair: %tuple.type.d07 = bind_symbolic_name Pair, 0 [symbolic = %Pair (constants.%Pair)] -// CHECK:STDOUT: %HasPair: type = class_type @HasPair, @HasPair(%Pair) [symbolic = %HasPair (constants.%HasPair.920)] -// CHECK:STDOUT: %ptr: type = ptr_type %HasPair [symbolic = %ptr (constants.%ptr.c3d)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.ba5)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @HasPair.as.Destroy.impl.Op.%ptr (%ptr.c3d)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%A.loc6_6.2: %i32, %B.loc6_15.2: %i32) { // CHECK:STDOUT: %A.loc6_6.1: %i32 = bind_symbolic_name A, 0 [symbolic = %A.loc6_6.1 (constants.%A)] // CHECK:STDOUT: %B.loc6_15.1: %i32 = bind_symbolic_name B, 1 [symbolic = %B.loc6_15.1 (constants.%B)] @@ -571,19 +460,6 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %Pair.loc4_15.1 => constants.%Pair // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @HasPair.as.Destroy.impl(constants.%Pair) { -// CHECK:STDOUT: %Pair => constants.%Pair -// CHECK:STDOUT: %HasPair => constants.%HasPair.920 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HasPair.as.Destroy.impl.Op(constants.%Pair) { -// CHECK:STDOUT: %Pair => constants.%Pair -// CHECK:STDOUT: %HasPair => constants.%HasPair.920 -// CHECK:STDOUT: %ptr => constants.%ptr.c3d -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ba5 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @HasPair(constants.%tuple.159) { // CHECK:STDOUT: %Pair.loc4_15.1 => constants.%tuple.159 // CHECK:STDOUT: @@ -621,21 +497,9 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] @@ -655,11 +519,9 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -714,43 +576,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -759,10 +585,6 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -770,10 +592,6 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_6.2: type) { // CHECK:STDOUT: %T.loc7_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.1 (constants.%T)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc7_6.1, %T.loc7_6.1) [symbolic = %tuple.type (constants.%tuple.type.d00)] diff --git a/toolchain/check/testdata/deduce/type_operator.carbon b/toolchain/check/testdata/deduce/type_operator.carbon index 40393774b2d9..5dc79f9326dc 100644 --- a/toolchain/check/testdata/deduce/type_operator.carbon +++ b/toolchain/check/testdata/deduce/type_operator.carbon @@ -71,13 +71,6 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -92,6 +85,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f [symbolic] // CHECK:STDOUT: %F.specific_fn.ef1: = specific_function %F, @F(%T) [symbolic] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -101,11 +96,9 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -154,27 +147,7 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -182,8 +155,6 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.2: type) { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_20.1: type = ptr_type %T.loc6_6.1 [symbolic = %ptr.loc6_20.1 (constants.%ptr.79f)] @@ -244,13 +215,6 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -278,11 +242,9 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -333,27 +295,7 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -361,8 +303,6 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.2: type) { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] // CHECK:STDOUT: %const.loc6_19.1: type = const_type %T.loc6_6.1 [symbolic = %const.loc6_19.1 (constants.%const.a1a)] @@ -426,13 +366,6 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -459,11 +392,9 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -514,27 +445,7 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -542,8 +453,6 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.2: type) { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_20.1: type = ptr_type %T.loc6_6.1 [symbolic = %ptr.loc6_20.1 (constants.%ptr.79f)] @@ -604,13 +513,6 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %type: type = facet_type [concrete] @@ -626,6 +528,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %require_complete.20b: = require_complete_type %ptr.6d4 [symbolic] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%T) [symbolic] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %const.668: type = const_type %C [concrete] // CHECK:STDOUT: %pattern_type.6af: type = pattern_type %const.668 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -634,11 +538,9 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -689,27 +591,7 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -717,8 +599,6 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.2: type) { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.1 (constants.%T)] // CHECK:STDOUT: %const.loc6_19.1: type = const_type %T.loc6_6.1 [symbolic = %const.loc6_19.1 (constants.%const.a1a)] 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 4aa15c185a31..7adb1448eb17 100644 --- a/toolchain/check/testdata/deduce/value_with_type_through_access.carbon +++ b/toolchain/check/testdata/deduce/value_with_type_through_access.carbon @@ -114,15 +114,8 @@ fn G() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] // CHECK:STDOUT: %HoldsType.cc9: type = class_type @HoldsType, @HoldsType(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cc4: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.47e: type = ptr_type %HoldsType.cc9 [symbolic] -// CHECK:STDOUT: %pattern_type.c39: type = pattern_type %ptr.47e [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type.cd5: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.5e0: %HoldsType.as.Destroy.impl.Op.type.cd5 = 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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.ec6: type = pattern_type %HoldsType.cc9 [symbolic] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.elem0: type = tuple_access %T, element0 [symbolic] @@ -132,11 +125,6 @@ fn G() { // CHECK:STDOUT: %require_complete.514: = require_complete_type %HoldsType.cc9 [symbolic] // CHECK:STDOUT: %require_complete.fec: = require_complete_type %tuple.elem0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%C) [concrete] @@ -146,12 +134,18 @@ fn G() { // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%tuple) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.498: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%tuple) [concrete] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type.543: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%tuple) [concrete] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.2e3: %HoldsType.as.Destroy.impl.Op.type.543 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.003: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.be8) [concrete] +// CHECK:STDOUT: %facet_value.a52: %type_where = facet_value %HoldsType.c09, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6cc: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.a52) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.f7f: %AggregateT.as_type.as.Destroy.impl.Op.type.6cc = struct_value () [concrete] // CHECK:STDOUT: %ptr.79a: type = ptr_type %HoldsType.c09 [concrete] -// CHECK:STDOUT: %pattern_type.bb8: type = pattern_type %ptr.79a [concrete] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.specific_fn: = specific_function %HoldsType.as.Destroy.impl.Op.2e3, @HoldsType.as.Destroy.impl.Op(%tuple) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.89c: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.f7f, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.a52) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -214,62 +208,13 @@ fn G() { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @HoldsType.as.Destroy.impl(@HoldsType.%T.loc4_17.2: %tuple.type) { -// CHECK:STDOUT: %T: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.cc4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T) [symbolic = %HoldsType.as.Destroy.impl.Op.type (constants.%HoldsType.as.Destroy.impl.Op.type.cd5)] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type.cd5) = struct_value () [symbolic = %HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op.5e0)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @HoldsType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.decl: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type.cd5) = fn_decl @HoldsType.as.Destroy.impl.Op [symbolic = @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op.5e0)] { -// CHECK:STDOUT: %self.patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.c39) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.c39) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_31.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.47e) = value_param call_param0 -// CHECK:STDOUT: %.loc4_31.2: type = splice_block %Self.ref [symbolic = %HoldsType (constants.%HoldsType.cc9)] { -// CHECK:STDOUT: %.loc4_31.3: type = specific_constant constants.%HoldsType.cc9, @HoldsType(constants.%T) [symbolic = %HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_31.3 [symbolic = %HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.47e) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %HoldsType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @HoldsType.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc4_17.2: %tuple.type) { // CHECK:STDOUT: %T.loc4_17.1: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%HoldsType.cc9 [symbolic = @HoldsType.as.Destroy.impl.%HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: impl_decl @HoldsType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.decl), @HoldsType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(constants.%T) [symbolic = @HoldsType.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.cc4)] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -278,28 +223,13 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @HoldsType.as.Destroy.impl.Op(@HoldsType.%T.loc4_17.2: %tuple.type) { -// CHECK:STDOUT: %T: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: %ptr: type = ptr_type %HoldsType [symbolic = %ptr (constants.%ptr.47e)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.c39)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.47e)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc8_6.2: %tuple.type) { // CHECK:STDOUT: %T.loc8_6.1: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_6.1 (constants.%T)] // CHECK:STDOUT: %HoldsType.loc8_34.1: type = class_type @HoldsType, @HoldsType(%T.loc8_6.1) [symbolic = %HoldsType.loc8_34.1 (constants.%HoldsType.cc9)] @@ -317,8 +247,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -342,14 +270,20 @@ fn G() { // CHECK:STDOUT: %.loc13_30.5: ref %C = converted %.loc13_30.1, %.loc13_30.4 // CHECK:STDOUT: %.loc13_30.6: %C = bind_value %.loc13_30.5 // CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn(%.loc13_8.2, %.loc13_30.6) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc13_30.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc13_30: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc13_30.7: %type_where = converted constants.%C, %facet_value.loc13_30 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13_30: = bound_method %.loc13_30.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.be8) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.003] +// CHECK:STDOUT: %bound_method.loc13_30: = bound_method %.loc13_30.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc13_30: %ptr.019 = addr_of %.loc13_30.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc13_30) -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.bound: = bound_method %.loc13_6.4, constants.%HoldsType.as.Destroy.impl.Op.2e3 -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.specific_fn: = specific_function constants.%HoldsType.as.Destroy.impl.Op.2e3, @HoldsType.as.Destroy.impl.Op(constants.%tuple) [concrete = constants.%HoldsType.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %.loc13_6.4, %HoldsType.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13_30: init %empty_tuple.type = call %bound_method.loc13_30(%addr.loc13_30) +// CHECK:STDOUT: %facet_value.loc13_6: %type_where = facet_value constants.%HoldsType.c09, () [concrete = constants.%facet_value.a52] +// CHECK:STDOUT: %.loc13_6.5: %type_where = converted constants.%HoldsType.c09, %facet_value.loc13_6 [concrete = constants.%facet_value.a52] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13_6: = bound_method %.loc13_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.f7f +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.f7f, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.a52) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.89c] +// CHECK:STDOUT: %bound_method.loc13_6: = bound_method %.loc13_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc13_6: %ptr.79a = addr_of %.loc13_6.4 -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr.loc13_6) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13_6: init %empty_tuple.type = call %bound_method.loc13_6(%addr.loc13_6) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -359,19 +293,6 @@ fn G() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.cc9 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.cc4 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.cc9 -// CHECK:STDOUT: %ptr => constants.%ptr.47e -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c39 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc8_6.1 => constants.%T // CHECK:STDOUT: %HoldsType.loc8_34.1 => constants.%HoldsType.cc9 @@ -394,25 +315,8 @@ fn G() { // CHECK:STDOUT: %pattern_type.loc8_37 => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete.loc8_21 => constants.%complete_type -// CHECK:STDOUT: %require_complete.loc8_38 => constants.%complete_type -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl(constants.%tuple) { -// CHECK:STDOUT: %T => constants.%tuple -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.c09 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.498 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type => constants.%HoldsType.as.Destroy.impl.Op.type.543 -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op => constants.%HoldsType.as.Destroy.impl.Op.2e3 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl.Op(constants.%tuple) { -// CHECK:STDOUT: %T => constants.%tuple -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.c09 -// CHECK:STDOUT: %ptr => constants.%ptr.79a -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.bb8 +// CHECK:STDOUT: %require_complete.loc8_21 => constants.%complete_type.357 +// CHECK:STDOUT: %require_complete.loc8_38 => constants.%complete_type.357 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- struct_access.carbon @@ -427,15 +331,8 @@ fn G() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] // CHECK:STDOUT: %HoldsType.843: type = class_type @HoldsType, @HoldsType(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c73: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.ca6: type = ptr_type %HoldsType.843 [symbolic] -// CHECK:STDOUT: %pattern_type.051: type = pattern_type %ptr.ca6 [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type.73f: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.266: %HoldsType.as.Destroy.impl.Op.type.73f = 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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.aa4: type = pattern_type %HoldsType.843 [symbolic] // CHECK:STDOUT: %.20a: type = struct_access %T, element0 [symbolic] // CHECK:STDOUT: %pattern_type.9f0: type = pattern_type %.20a [symbolic] @@ -444,11 +341,6 @@ fn G() { // CHECK:STDOUT: %require_complete.b19: = require_complete_type %HoldsType.843 [symbolic] // CHECK:STDOUT: %require_complete.1b9: = require_complete_type %.20a [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.t = struct_value (%C) [concrete] @@ -458,12 +350,18 @@ fn G() { // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%struct) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.df5: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%struct) [concrete] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type.db4: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%struct) [concrete] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.7ed: %HoldsType.as.Destroy.impl.Op.type.db4 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.003: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.be8) [concrete] +// CHECK:STDOUT: %facet_value.451: %type_where = facet_value %HoldsType.705, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.971: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.451) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.6c7: %AggregateT.as_type.as.Destroy.impl.Op.type.971 = struct_value () [concrete] // CHECK:STDOUT: %ptr.5d1: type = ptr_type %HoldsType.705 [concrete] -// CHECK:STDOUT: %pattern_type.c97: type = pattern_type %ptr.5d1 [concrete] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.specific_fn: = specific_function %HoldsType.as.Destroy.impl.Op.7ed, @HoldsType.as.Destroy.impl.Op(%struct) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.cd1: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.6c7, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.451) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -523,62 +421,13 @@ fn G() { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @HoldsType.as.Destroy.impl(@HoldsType.%T.loc4_17.2: %struct_type.t) { -// CHECK:STDOUT: %T: %struct_type.t = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType.843)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.c73)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T) [symbolic = %HoldsType.as.Destroy.impl.Op.type (constants.%HoldsType.as.Destroy.impl.Op.type.73f)] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type.73f) = struct_value () [symbolic = %HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op.266)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @HoldsType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.decl: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type.73f) = fn_decl @HoldsType.as.Destroy.impl.Op [symbolic = @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op.266)] { -// CHECK:STDOUT: %self.patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.051) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.051) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_33.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.ca6) = value_param call_param0 -// CHECK:STDOUT: %.loc4_33.2: type = splice_block %Self.ref [symbolic = %HoldsType (constants.%HoldsType.843)] { -// CHECK:STDOUT: %.loc4_33.3: type = specific_constant constants.%HoldsType.843, @HoldsType(constants.%T) [symbolic = %HoldsType (constants.%HoldsType.843)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_33.3 [symbolic = %HoldsType (constants.%HoldsType.843)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.ca6) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %HoldsType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @HoldsType.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc4_17.2: %struct_type.t) { // CHECK:STDOUT: %T.loc4_17.1: %struct_type.t = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.1 (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%HoldsType.843 [symbolic = @HoldsType.as.Destroy.impl.%HoldsType (constants.%HoldsType.843)] -// CHECK:STDOUT: impl_decl @HoldsType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.decl), @HoldsType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(constants.%T) [symbolic = @HoldsType.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.c73)] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -587,28 +436,13 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @HoldsType.as.Destroy.impl.Op(@HoldsType.%T.loc4_17.2: %struct_type.t) { -// CHECK:STDOUT: %T: %struct_type.t = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType.843)] -// CHECK:STDOUT: %ptr: type = ptr_type %HoldsType [symbolic = %ptr (constants.%ptr.ca6)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.051)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.ca6)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc8_6.2: %struct_type.t) { // CHECK:STDOUT: %T.loc8_6.1: %struct_type.t = bind_symbolic_name T, 0 [symbolic = %T.loc8_6.1 (constants.%T)] // CHECK:STDOUT: %HoldsType.loc8_36.1: type = class_type @HoldsType, @HoldsType(%T.loc8_6.1) [symbolic = %HoldsType.loc8_36.1 (constants.%HoldsType.843)] @@ -626,8 +460,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -651,14 +483,20 @@ fn G() { // CHECK:STDOUT: %.loc13_33.5: ref %C = converted %.loc13_33.1, %.loc13_33.4 // CHECK:STDOUT: %.loc13_33.6: %C = bind_value %.loc13_33.5 // CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn(%.loc13_8.2, %.loc13_33.6) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc13_33.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc13_33: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc13_33.7: %type_where = converted constants.%C, %facet_value.loc13_33 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13_33: = bound_method %.loc13_33.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.be8) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.003] +// CHECK:STDOUT: %bound_method.loc13_33: = bound_method %.loc13_33.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc13_33: %ptr.019 = addr_of %.loc13_33.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc13_33) -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.bound: = bound_method %.loc13_6.4, constants.%HoldsType.as.Destroy.impl.Op.7ed -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.specific_fn: = specific_function constants.%HoldsType.as.Destroy.impl.Op.7ed, @HoldsType.as.Destroy.impl.Op(constants.%struct) [concrete = constants.%HoldsType.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %.loc13_6.4, %HoldsType.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13_33: init %empty_tuple.type = call %bound_method.loc13_33(%addr.loc13_33) +// CHECK:STDOUT: %facet_value.loc13_6: %type_where = facet_value constants.%HoldsType.705, () [concrete = constants.%facet_value.451] +// CHECK:STDOUT: %.loc13_6.5: %type_where = converted constants.%HoldsType.705, %facet_value.loc13_6 [concrete = constants.%facet_value.451] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13_6: = bound_method %.loc13_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.6c7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.6c7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.451) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.cd1] +// CHECK:STDOUT: %bound_method.loc13_6: = bound_method %.loc13_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc13_6: %ptr.5d1 = addr_of %.loc13_6.4 -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr.loc13_6) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13_6: init %empty_tuple.type = call %bound_method.loc13_6(%addr.loc13_6) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -668,19 +506,6 @@ fn G() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.843 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.c73 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.843 -// CHECK:STDOUT: %ptr => constants.%ptr.ca6 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.051 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc8_6.1 => constants.%T // CHECK:STDOUT: %HoldsType.loc8_36.1 => constants.%HoldsType.843 @@ -703,25 +528,8 @@ fn G() { // CHECK:STDOUT: %pattern_type.loc8_39 => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete.loc8_23 => constants.%complete_type -// CHECK:STDOUT: %require_complete.loc8_40 => constants.%complete_type -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl(constants.%struct) { -// CHECK:STDOUT: %T => constants.%struct -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.705 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.df5 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type => constants.%HoldsType.as.Destroy.impl.Op.type.db4 -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op => constants.%HoldsType.as.Destroy.impl.Op.7ed -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl.Op(constants.%struct) { -// CHECK:STDOUT: %T => constants.%struct -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.705 -// CHECK:STDOUT: %ptr => constants.%ptr.5d1 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c97 +// CHECK:STDOUT: %require_complete.loc8_23 => constants.%complete_type.357 +// CHECK:STDOUT: %require_complete.loc8_40 => constants.%complete_type.357 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_class_access.carbon @@ -729,15 +537,6 @@ fn G() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, type [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.955: = impl_witness @Class.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] -// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.t: type = struct_type {.t: type} [concrete] // CHECK:STDOUT: %complete_type.509: = complete_type_witness %struct_type.t [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] @@ -745,13 +544,9 @@ fn G() { // CHECK:STDOUT: %T.0de: %Class = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] // CHECK:STDOUT: %HoldsType.f95cf2.1: type = class_type @HoldsType, @HoldsType(%T.0de) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.c42b5c.1: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T.0de) [symbolic] -// CHECK:STDOUT: %ptr.deb697.1: type = ptr_type %HoldsType.f95cf2.1 [symbolic] -// CHECK:STDOUT: %pattern_type.dc9093.1: type = pattern_type %ptr.deb697.1 [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type.d19c2c.1: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T.0de) [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.044431.1: %HoldsType.as.Destroy.impl.Op.type.d19c2c.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: %pattern_type.937: type = pattern_type %HoldsType.f95cf2.1 [symbolic] @@ -760,11 +555,6 @@ fn G() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.8fa644.1: = require_complete_type %HoldsType.f95cf2.1 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %c: %Class = bind_symbolic_name c, 0 [symbolic] @@ -779,27 +569,34 @@ fn G() { // CHECK:STDOUT: %Class.val: %Class = struct_value (%C) [concrete] // CHECK:STDOUT: %HoldsType.f95cf2.2: type = class_type @HoldsType, @HoldsType(%c) [symbolic] // CHECK:STDOUT: %HoldsType.val: %HoldsType.f95cf2.2 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.c42b5c.2: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%c) [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type.d19c2c.2: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%c) [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.044431.2: %HoldsType.as.Destroy.impl.Op.type.d19c2c.2 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.facet.792009.2: %Destroy.type = facet_value %HoldsType.f95cf2.2, (%Destroy.impl_witness.c42b5c.2) [symbolic] -// CHECK:STDOUT: %.efe: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.792009.2 [symbolic] -// CHECK:STDOUT: %ptr.deb697.2: type = ptr_type %HoldsType.f95cf2.2 [symbolic] -// CHECK:STDOUT: %pattern_type.dc9093.2: type = pattern_type %ptr.deb697.2 [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.specific_fn: = specific_function %HoldsType.as.Destroy.impl.Op.044431.2, @HoldsType.as.Destroy.impl.Op(%c) [symbolic] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.1b5: %type_where = facet_value %HoldsType.f95cf2.2, () [symbolic] +// CHECK:STDOUT: %ptr.deb: type = ptr_type %HoldsType.f95cf2.2 [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.c18: = lookup_impl_witness %HoldsType.f95cf2.2, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.facet.1db: %Destroy.type = facet_value %HoldsType.f95cf2.2, (%Destroy.lookup_impl_witness.c18) [symbolic] +// CHECK:STDOUT: %.da5: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.1db [symbolic] +// CHECK:STDOUT: %impl.elem0.9e0: %.da5 = impl_witness_access %Destroy.lookup_impl_witness.c18, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.106: = specific_impl_function %impl.elem0.9e0, @Destroy.Op(%Destroy.facet.1db) [symbolic] +// CHECK:STDOUT: %facet_value.d3d: %type_where = facet_value %Class, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d3d) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.7c2: %AggregateT.as_type.as.Destroy.impl.Op.type.bd3 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d3d) [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.f97: %type.as.Copy.impl.Op.type = import_ref Core//prelude/parts/copy, loc40_31, loaded [concrete = constants.%type.as.Copy.impl.Op] // CHECK:STDOUT: %Copy.impl_witness_table.40f = impl_witness_table (%Core.import_ref.f97), @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 { @@ -854,73 +651,8 @@ fn G() { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Class.as.Destroy.impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: %Class.as.Destroy.impl.Op.type = fn_decl @Class.as.Destroy.impl.Op [concrete = constants.%Class.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @HoldsType.as.Destroy.impl(@HoldsType.%T.loc8_17.2: %Class) { -// CHECK:STDOUT: %T: %Class = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.0de)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType.f95cf2.1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.c42b5c.1)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T) [symbolic = %HoldsType.as.Destroy.impl.Op.type (constants.%HoldsType.as.Destroy.impl.Op.type.d19c2c.1)] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type.d19c2c.1) = struct_value () [symbolic = %HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op.044431.1)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @HoldsType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.decl: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type.d19c2c.1) = fn_decl @HoldsType.as.Destroy.impl.Op [symbolic = @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op.044431.1)] { -// CHECK:STDOUT: %self.patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.dc9093.1) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.dc9093.1) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8_28.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.deb697.1) = value_param call_param0 -// CHECK:STDOUT: %.loc8_28.2: type = splice_block %Self.ref [symbolic = %HoldsType (constants.%HoldsType.f95cf2.1)] { -// CHECK:STDOUT: %.loc8_28.3: type = specific_constant constants.%HoldsType.f95cf2.1, @HoldsType(constants.%T.0de) [symbolic = %HoldsType (constants.%HoldsType.f95cf2.1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc8_28.3 [symbolic = %HoldsType (constants.%HoldsType.f95cf2.1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.deb697.1) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %HoldsType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @HoldsType.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc23: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %.loc5: %Class.elem = field_decl t, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.955] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.t [concrete = constants.%complete_type.509] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -935,10 +667,6 @@ fn G() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%HoldsType.f95cf2.1 [symbolic = @HoldsType.as.Destroy.impl.%HoldsType (constants.%HoldsType.f95cf2.1)] -// CHECK:STDOUT: impl_decl @HoldsType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.decl), @HoldsType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(constants.%T.0de) [symbolic = @HoldsType.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.c42b5c.1)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -948,10 +676,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -959,19 +683,6 @@ fn G() { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Class.as.Destroy.impl.Op(%self.param: %ptr.e71) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @HoldsType.as.Destroy.impl.Op(@HoldsType.%T.loc8_17.2: %Class) { -// CHECK:STDOUT: %T: %Class = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.0de)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType.f95cf2.1)] -// CHECK:STDOUT: %ptr: type = ptr_type %HoldsType [symbolic = %ptr (constants.%ptr.deb697.1)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.dc9093.1)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.deb697.1)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc21_6.2: %Class) { // CHECK:STDOUT: %T.loc21_6.1: %Class = bind_symbolic_name T, 0 [symbolic = %T.loc21_6.1 (constants.%T.0de)] // CHECK:STDOUT: %HoldsType.loc21_31.1: type = class_type @HoldsType, @HoldsType(%T.loc21_6.1) [symbolic = %HoldsType.loc21_31.1 (constants.%HoldsType.f95cf2.1)] @@ -987,8 +698,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -998,8 +707,8 @@ fn G() { // CHECK:STDOUT: %.loc26_26.1: %struct_type.t = struct_literal (%C.ref) // CHECK:STDOUT: %Class.ref.loc26_31: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %impl.elem0.loc26: %.98f = impl_witness_access constants.%Copy.impl_witness.de9, element0 [concrete = constants.%type.as.Copy.impl.Op] -// CHECK:STDOUT: %bound_method.loc26: = bound_method %C.ref, %impl.elem0.loc26 [concrete = constants.%type.as.Copy.impl.Op.bound] -// CHECK:STDOUT: %type.as.Copy.impl.Op.call: init type = call %bound_method.loc26(%C.ref) [concrete = constants.%C] +// CHECK:STDOUT: %bound_method.loc26_25: = bound_method %C.ref, %impl.elem0.loc26 [concrete = constants.%type.as.Copy.impl.Op.bound] +// CHECK:STDOUT: %type.as.Copy.impl.Op.call: init type = call %bound_method.loc26_25(%C.ref) [concrete = constants.%C] // CHECK:STDOUT: %.loc26_26.2: ref %Class = temporary_storage // CHECK:STDOUT: %.loc26_26.3: ref type = class_element_access %.loc26_26.2, element0 // CHECK:STDOUT: %.loc26_26.4: init type = initialize_from %type.as.Copy.impl.Op.call to %.loc26_26.3 [concrete = constants.%C] @@ -1022,15 +731,21 @@ fn G() { // CHECK:STDOUT: %.loc27_6.4: ref %HoldsType.f95cf2.2 = temporary %.loc27_6.2, %.loc27_6.3 // CHECK:STDOUT: %.loc27_8: ref %HoldsType.f95cf2.2 = converted %.loc27_6.1, %.loc27_6.4 // CHECK:STDOUT: %.loc27_26: %empty_struct_type = struct_literal () -// CHECK:STDOUT: %impl.elem0.loc27: %.efe = impl_witness_access constants.%Destroy.impl_witness.c42b5c.2, element0 [symbolic = constants.%HoldsType.as.Destroy.impl.Op.044431.2] +// CHECK:STDOUT: %facet_value.loc27: %type_where = facet_value constants.%HoldsType.f95cf2.2, () [symbolic = constants.%facet_value.1b5] +// CHECK:STDOUT: %.loc27_6.5: %type_where = converted constants.%HoldsType.f95cf2.2, %facet_value.loc27 [symbolic = constants.%facet_value.1b5] +// CHECK:STDOUT: %impl.elem0.loc27: %.da5 = impl_witness_access constants.%Destroy.lookup_impl_witness.c18, element0 [symbolic = constants.%impl.elem0.9e0] // CHECK:STDOUT: %bound_method.loc27_6.1: = bound_method %.loc27_6.4, %impl.elem0.loc27 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0.loc27, @HoldsType.as.Destroy.impl.Op(constants.%c) [symbolic = constants.%HoldsType.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc27_6.2: = bound_method %.loc27_6.4, %specific_fn -// CHECK:STDOUT: %addr.loc27: %ptr.deb697.2 = addr_of %.loc27_6.4 -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc27_6.2(%addr.loc27) -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.bound: = bound_method %.loc26_26.6, constants.%Class.as.Destroy.impl.Op +// CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0.loc27, @Destroy.Op(constants.%Destroy.facet.1db) [symbolic = constants.%specific_impl_fn.106] +// CHECK:STDOUT: %bound_method.loc27_6.2: = bound_method %.loc27_6.4, %specific_impl_fn +// CHECK:STDOUT: %addr.loc27: %ptr.deb = addr_of %.loc27_6.4 +// CHECK:STDOUT: %.loc27_6.6: init %empty_tuple.type = call %bound_method.loc27_6.2(%addr.loc27) +// CHECK:STDOUT: %facet_value.loc26: %type_where = facet_value constants.%Class, () [concrete = constants.%facet_value.d3d] +// CHECK:STDOUT: %.loc26_26.7: %type_where = converted constants.%Class, %facet_value.loc26 [concrete = constants.%facet_value.d3d] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc26_26.6, constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.7c2, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d3d) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc26_26: = bound_method %.loc26_26.6, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc26: %ptr.e71 = addr_of %.loc26_26.6 -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Class.as.Destroy.impl.Op.bound(%addr.loc26) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc26_26(%addr.loc26) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1040,19 +755,6 @@ fn G() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl(constants.%T.0de) { -// CHECK:STDOUT: %T => constants.%T.0de -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.f95cf2.1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.c42b5c.1 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl.Op(constants.%T.0de) { -// CHECK:STDOUT: %T => constants.%T.0de -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.f95cf2.1 -// CHECK:STDOUT: %ptr => constants.%ptr.deb697.1 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc9093.1 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.0de) { // CHECK:STDOUT: %T.loc21_6.1 => constants.%T.0de // CHECK:STDOUT: %HoldsType.loc21_31.1 => constants.%HoldsType.f95cf2.1 @@ -1066,23 +768,6 @@ fn G() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl(constants.%c) { -// CHECK:STDOUT: %T => constants.%c -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.f95cf2.2 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.c42b5c.2 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type => constants.%HoldsType.as.Destroy.impl.Op.type.d19c2c.2 -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op => constants.%HoldsType.as.Destroy.impl.Op.044431.2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl.Op(constants.%c) { -// CHECK:STDOUT: %T => constants.%c -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.f95cf2.2 -// CHECK:STDOUT: %ptr => constants.%ptr.deb697.2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc9093.2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_array_index.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1096,16 +781,9 @@ fn G() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] // CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T.eb6) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.fc1: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T.eb6) [symbolic] -// CHECK:STDOUT: %ptr.ea3: type = ptr_type %array_type [concrete] -// CHECK:STDOUT: %ptr.998: type = ptr_type %HoldsType [symbolic] -// CHECK:STDOUT: %pattern_type.34f: type = pattern_type %ptr.998 [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T.eb6) [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op: %HoldsType.as.Destroy.impl.Op.type = 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: %ptr.ea3: type = ptr_type %array_type [concrete] // CHECK:STDOUT: %pattern_type.142: type = pattern_type %HoldsType [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -1132,11 +810,6 @@ fn G() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.640: = require_complete_type %HoldsType [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] @@ -1149,6 +822,7 @@ fn G() { // CHECK:STDOUT: %type.as.Copy.impl.Op: %type.as.Copy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %type.as.Copy.impl.Op.bound: = bound_method %C, %type.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%C) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %facet_value: %type_where = facet_value %array_type, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.9e6: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] @@ -1158,14 +832,13 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] @@ -1173,6 +846,7 @@ fn G() { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.f97: %type.as.Copy.impl.Op.type = import_ref Core//prelude/parts/copy, loc40_31, loaded [concrete = constants.%type.as.Copy.impl.Op] // CHECK:STDOUT: %Copy.impl_witness_table.40f = impl_witness_table (%Core.import_ref.f97), @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 { @@ -1237,61 +911,12 @@ fn G() { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @HoldsType.as.Destroy.impl(@HoldsType.%T.loc4_17.2: %array_type) { -// CHECK:STDOUT: %T: %array_type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.eb6)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.fc1)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T) [symbolic = %HoldsType.as.Destroy.impl.Op.type (constants.%HoldsType.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type) = struct_value () [symbolic = %HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @HoldsType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.decl: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type) = fn_decl @HoldsType.as.Destroy.impl.Op [symbolic = @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.34f) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.34f) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_37.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.998) = value_param call_param0 -// CHECK:STDOUT: %.loc4_37.2: type = splice_block %Self.ref [symbolic = %HoldsType (constants.%HoldsType)] { -// CHECK:STDOUT: %.loc4_37.3: type = specific_constant constants.%HoldsType, @HoldsType(constants.%T.eb6) [symbolic = %HoldsType (constants.%HoldsType)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_37.3 [symbolic = %HoldsType (constants.%HoldsType)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.998) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %HoldsType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @HoldsType.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc14: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc4_17.2: %array_type) { // CHECK:STDOUT: %T.loc4_17.1: %array_type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.1 (constants.%T.eb6)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%HoldsType [symbolic = @HoldsType.as.Destroy.impl.%HoldsType (constants.%HoldsType)] -// CHECK:STDOUT: impl_decl @HoldsType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.decl), @HoldsType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(constants.%T.eb6) [symbolic = @HoldsType.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.fc1)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1301,10 +926,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1312,17 +933,6 @@ fn G() { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @HoldsType.as.Destroy.impl.Op(@HoldsType.%T.loc4_17.2: %array_type) { -// CHECK:STDOUT: %T: %array_type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.eb6)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType)] -// CHECK:STDOUT: %ptr: type = ptr_type %HoldsType [symbolic = %ptr (constants.%ptr.998)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.34f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.998)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc12_6.2: %array_type) { // CHECK:STDOUT: %T.loc12_6.1: %array_type = bind_symbolic_name T, 0 [symbolic = %T.loc12_6.1 (constants.%T.eb6)] // CHECK:STDOUT: %HoldsType.loc12_40.1: type = class_type @HoldsType, @HoldsType(%T.loc12_6.1) [symbolic = %HoldsType.loc12_40.1 (constants.%HoldsType)] @@ -1337,8 +947,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -1376,19 +984,6 @@ fn G() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl(constants.%T.eb6) { -// CHECK:STDOUT: %T => constants.%T.eb6 -// CHECK:STDOUT: %HoldsType => constants.%HoldsType -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.fc1 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl.Op(constants.%T.eb6) { -// CHECK:STDOUT: %T => constants.%T.eb6 -// CHECK:STDOUT: %HoldsType => constants.%HoldsType -// CHECK:STDOUT: %ptr => constants.%ptr.998 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.34f -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.eb6) { // CHECK:STDOUT: %T.loc12_6.1 => constants.%T.eb6 // CHECK:STDOUT: %HoldsType.loc12_40.1 => constants.%HoldsType diff --git a/toolchain/check/testdata/facet/call_combined_impl_witness.carbon b/toolchain/check/testdata/facet/call_combined_impl_witness.carbon index c1f5acbcd0cf..25504574b4f6 100644 --- a/toolchain/check/testdata/facet/call_combined_impl_witness.carbon +++ b/toolchain/check/testdata/facet/call_combined_impl_witness.carbon @@ -64,15 +64,8 @@ fn F() { // CHECK:STDOUT: %B.assoc_type: type = assoc_entity_type @B [concrete] // CHECK:STDOUT: %assoc0.a29: %B.assoc_type = assoc_entity element0, @B.%B.BB.decl [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Empty.impl_witness: = impl_witness file.%Empty.impl_witness_table [concrete] // CHECK:STDOUT: %A.impl_witness: = impl_witness file.%A.impl_witness_table [concrete] // CHECK:STDOUT: %C.as.A.impl.AA.type: type = fn_type @C.as.A.impl.AA [concrete] @@ -117,24 +110,31 @@ fn F() { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] -// CHECK:STDOUT: %facet_value: %facet_type.b5f = facet_value %C, (%Empty.impl_witness, %A.impl_witness, %B.impl_witness) [concrete] +// CHECK:STDOUT: %facet_value.c74: %facet_type.b5f = facet_value %C, (%Empty.impl_witness, %A.impl_witness, %B.impl_witness) [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] -// CHECK:STDOUT: %G.specific_fn: = specific_function %G, @G(%facet_value) [concrete] +// CHECK:STDOUT: %G.specific_fn: = specific_function %G, @G(%facet_value.c74) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.be8) [concrete] // CHECK:STDOUT: %.1ee: type = fn_type_with_self_type %A.AA.type, %A.facet.d7e [concrete] // CHECK:STDOUT: %.d72: type = fn_type_with_self_type %B.BB.type, %B.facet.c0b [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .BitAndWith = %Core.BitAndWith +// 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.BitAndWith: %BitAndWith.type.f2e = import_ref Core//prelude/parts/as, BitAndWith, loaded [concrete = constants.%BitAndWith.generic] // CHECK:STDOUT: %Core.import_ref.636: %type.as.BitAndWith.impl.Op.type = import_ref Core//prelude/parts/as, loc25_42, loaded [concrete = constants.%type.as.BitAndWith.impl.Op] // CHECK:STDOUT: %BitAndWith.impl_witness_table = impl_witness_table (%Core.import_ref.636), @type.as.BitAndWith.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 { @@ -237,22 +237,6 @@ fn F() { // CHECK:STDOUT: witness = (%B.BB.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc24: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.Empty.impl: %C.ref as %Empty.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Empty.impl_witness @@ -275,11 +259,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -294,8 +274,6 @@ fn F() { // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.A.impl.AA() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return @@ -385,16 +363,20 @@ fn F() { // CHECK:STDOUT: %.loc45_6.3: init %C = class_init (), %.loc45_6.2 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc45_6.4: ref %C = temporary %.loc45_6.2, %.loc45_6.3 // CHECK:STDOUT: %.loc45_8.1: ref %C = converted %.loc45_6.1, %.loc45_6.4 -// CHECK:STDOUT: %facet_value.loc45_12.1: %facet_type.b5f = 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.b5f = converted constants.%C, %facet_value.loc45_12.1 [concrete = constants.%facet_value] -// CHECK:STDOUT: %facet_value.loc45_12.2: %facet_type.b5f = 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.b5f = 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: %facet_value.loc45_12.1: %facet_type.b5f = facet_value constants.%C, (constants.%Empty.impl_witness, constants.%A.impl_witness, constants.%B.impl_witness) [concrete = constants.%facet_value.c74] +// CHECK:STDOUT: %.loc45_12.1: %facet_type.b5f = converted constants.%C, %facet_value.loc45_12.1 [concrete = constants.%facet_value.c74] +// CHECK:STDOUT: %facet_value.loc45_12.2: %facet_type.b5f = facet_value constants.%C, (constants.%Empty.impl_witness, constants.%A.impl_witness, constants.%B.impl_witness) [concrete = constants.%facet_value.c74] +// CHECK:STDOUT: %.loc45_12.2: %facet_type.b5f = converted constants.%C, %facet_value.loc45_12.2 [concrete = constants.%facet_value.c74] +// CHECK:STDOUT: %G.specific_fn: = specific_function %G.ref, @G(constants.%facet_value.c74) [concrete = constants.%G.specific_fn] // CHECK:STDOUT: %.loc45_8.2: %C = bind_value %.loc45_8.1 // CHECK:STDOUT: %G.call: init %empty_tuple.type = call %G.specific_fn(%.loc45_8.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc45_6.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc45_6: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc45_6.5: %type_where = converted constants.%C, %facet_value.loc45_6 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc45_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.be8) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc45_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.019 = addr_of %.loc45_6.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -416,13 +398,13 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @B.BB(constants.%B.facet.434) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @G(constants.%facet_value) { -// CHECK:STDOUT: %T.loc33_6.1 => constants.%facet_value +// CHECK:STDOUT: specific @G(constants.%facet_value.c74) { +// CHECK:STDOUT: %T.loc33_6.1 => constants.%facet_value.c74 // CHECK:STDOUT: %T.as_type.loc33_28.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: %A.lookup_impl_witness => constants.%A.impl_witness // CHECK:STDOUT: %A.facet.loc34 => constants.%A.facet.d7e // CHECK:STDOUT: %.loc34_4.2 => constants.%.1ee 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 24e92619da63..ddedcf8f0f6d 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 @@ -27,24 +27,17 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] -// CHECK:STDOUT: %Self.611: %Animal.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Goat: type = class_type @Goat [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Goat.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] -// CHECK:STDOUT: %pattern_type.396: type = pattern_type %ptr.940 [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.type: type = fn_type @Goat.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op: %Goat.as.Destroy.impl.Op.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: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %A: %Animal.type = bind_symbolic_name A, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.3c3: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Animal.type [concrete] // 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] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -54,11 +47,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -79,7 +70,7 @@ fn F() { // CHECK:STDOUT: %Animal.impl_witness_table = impl_witness_table (), @Goat.as.Animal.impl [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness %Animal.impl_witness_table [concrete = constants.%Animal.impl_witness] // CHECK:STDOUT: %WalkAnimal.decl: %WalkAnimal.type = fn_decl @WalkAnimal [concrete = constants.%WalkAnimal] { -// CHECK:STDOUT: %A.patt: %pattern_type.3c3 = symbolic_binding_pattern A, 0 [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type = symbolic_binding_pattern A, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc20: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -91,39 +82,19 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { -// CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.611] +// CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Goat.as.Destroy.impl: @Goat.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.decl: %Goat.as.Destroy.impl.Op.type = fn_decl @Goat.as.Destroy.impl.Op [concrete = constants.%Goat.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.396 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.396 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.940 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: %self: %ptr.940 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Goat.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Goat.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Animal.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Goat { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: impl_decl @Goat.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Goat.as.Destroy.impl.%Goat.as.Destroy.impl.Op.decl), @Goat.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -131,8 +102,6 @@ fn F() { // CHECK:STDOUT: .Self = constants.%Goat // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Goat.as.Destroy.impl.Op(%self.param: %ptr.940) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @WalkAnimal(%A.loc20_15.2: %Animal.type) { // CHECK:STDOUT: %A.loc20_15.1: %Animal.type = bind_symbolic_name A, 0 [symbolic = %A.loc20_15.1 (constants.%A)] // CHECK:STDOUT: 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 5d53a23d3cb5..7371ed3ab5e0 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 @@ -79,21 +79,9 @@ fn G() { // CHECK:STDOUT: %Generic.assoc_type.0fd877.1: type = assoc_entity_type @Generic, @Generic(%Scalar) [symbolic] // CHECK:STDOUT: %assoc0.2966cb.1: %Generic.assoc_type.0fd877.1 = assoc_entity element0, @Generic.%Generic.F.decl [symbolic] // CHECK:STDOUT: %GenericParam: type = class_type @GenericParam [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.0fd: = impl_witness @GenericParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.f73: type = ptr_type %GenericParam [concrete] -// CHECK:STDOUT: %pattern_type.7c3: type = pattern_type %ptr.f73 [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.type: type = fn_type @GenericParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op: %GenericParam.as.Destroy.impl.Op.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: %ImplsGeneric: type = class_type @ImplsGeneric [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c8c: = impl_witness @ImplsGeneric.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.011: type = ptr_type %ImplsGeneric [concrete] -// CHECK:STDOUT: %pattern_type.2db: type = pattern_type %ptr.011 [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.type: type = fn_type @ImplsGeneric.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op: %ImplsGeneric.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Generic.type.621: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete] // CHECK:STDOUT: %Self.93d: %Generic.type.621 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Generic.F.type.4cf: type = fn_type @Generic.F, @Generic(%GenericParam) [concrete] @@ -129,11 +117,9 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -219,38 +205,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @GenericParam.as.Destroy.impl: @GenericParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.decl: %GenericParam.as.Destroy.impl.Op.type = fn_decl @GenericParam.as.Destroy.impl.Op [concrete = constants.%GenericParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.7c3 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.7c3 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.f73 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: %self: %ptr.f73 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %GenericParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @GenericParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @ImplsGeneric.as.Destroy.impl: @ImplsGeneric.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.decl: %ImplsGeneric.as.Destroy.impl.Op.type = fn_decl @ImplsGeneric.as.Destroy.impl.Op [concrete = constants.%ImplsGeneric.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.2db = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.2db = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.011 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: %self: %ptr.011 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %ImplsGeneric.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @ImplsGeneric.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @ImplsGeneric.as.Generic.impl: %ImplsGeneric.ref as %Generic.type { // CHECK:STDOUT: %ImplsGeneric.as.Generic.impl.F.decl: %ImplsGeneric.as.Generic.impl.F.type = fn_decl @ImplsGeneric.as.Generic.impl.F [concrete = constants.%ImplsGeneric.as.Generic.impl.F] {} {} // CHECK:STDOUT: @@ -260,10 +214,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @GenericParam { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: impl_decl @GenericParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@GenericParam.as.Destroy.impl.%GenericParam.as.Destroy.impl.Op.decl), @GenericParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.0fd] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -272,10 +222,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @ImplsGeneric { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: impl_decl @ImplsGeneric.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@ImplsGeneric.as.Destroy.impl.%ImplsGeneric.as.Destroy.impl.Op.decl), @ImplsGeneric.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c8c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -287,10 +233,6 @@ fn G() { // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @GenericParam.as.Destroy.impl.Op(%self.param: %ptr.f73) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @ImplsGeneric.as.Destroy.impl.Op(%self.param: %ptr.011) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ImplsGeneric.as.Generic.impl.F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return @@ -438,21 +380,9 @@ fn G() { // CHECK:STDOUT: %Generic.assoc_type.0fd: type = assoc_entity_type @Generic, @Generic(%Scalar) [symbolic] // CHECK:STDOUT: %assoc0.296: %Generic.assoc_type.0fd = assoc_entity element0, @Generic.%Generic.F.decl [symbolic] // CHECK:STDOUT: %GenericParam: type = class_type @GenericParam [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.0fd: = impl_witness @GenericParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.f73: type = ptr_type %GenericParam [concrete] -// CHECK:STDOUT: %pattern_type.7c3: type = pattern_type %ptr.f73 [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.type: type = fn_type @GenericParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op: %GenericParam.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ImplsGeneric: type = class_type @ImplsGeneric [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c8c: = impl_witness @ImplsGeneric.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.011: type = ptr_type %ImplsGeneric [concrete] -// CHECK:STDOUT: %pattern_type.2db: type = pattern_type %ptr.011 [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.type: type = fn_type @ImplsGeneric.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op: %ImplsGeneric.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Generic.type.621: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete] // CHECK:STDOUT: %Self.93d: %Generic.type.621 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Generic.F.type.4cf: type = fn_type @Generic.F, @Generic(%GenericParam) [concrete] @@ -477,6 +407,13 @@ fn G() { // CHECK:STDOUT: %pattern_type.c4b: type = pattern_type %Generic.type.621 [concrete] // CHECK:STDOUT: %pattern_type.589: type = pattern_type %GenericParam [concrete] // CHECK:STDOUT: %CallGenericMethod.specific_fn: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %GenericParam, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.13c: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.a0a: %AggregateT.as_type.as.Destroy.impl.Op.type.13c = struct_value () [concrete] +// CHECK:STDOUT: %ptr.f73: type = ptr_type %GenericParam [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.a0a, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -559,38 +496,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @GenericParam.as.Destroy.impl: @GenericParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.decl: %GenericParam.as.Destroy.impl.Op.type = fn_decl @GenericParam.as.Destroy.impl.Op [concrete = constants.%GenericParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.7c3 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.7c3 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.f73 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: %self: %ptr.f73 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %GenericParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @GenericParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @ImplsGeneric.as.Destroy.impl: @ImplsGeneric.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.decl: %ImplsGeneric.as.Destroy.impl.Op.type = fn_decl @ImplsGeneric.as.Destroy.impl.Op [concrete = constants.%ImplsGeneric.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.2db = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.2db = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.011 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: %self: %ptr.011 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %ImplsGeneric.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @ImplsGeneric.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @ImplsGeneric.as.Generic.impl: %ImplsGeneric.ref as %Generic.type { // CHECK:STDOUT: %ImplsGeneric.as.Generic.impl.F.decl: %ImplsGeneric.as.Generic.impl.F.type = fn_decl @ImplsGeneric.as.Generic.impl.F [concrete = constants.%ImplsGeneric.as.Generic.impl.F] {} {} // CHECK:STDOUT: @@ -600,11 +505,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @GenericParam { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: impl_decl @GenericParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@GenericParam.as.Destroy.impl.%GenericParam.as.Destroy.impl.Op.decl), @GenericParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.0fd] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -612,11 +513,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @ImplsGeneric { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: impl_decl @ImplsGeneric.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@ImplsGeneric.as.Destroy.impl.%ImplsGeneric.as.Destroy.impl.Op.decl), @ImplsGeneric.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c8c] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -627,10 +524,6 @@ fn G() { // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @GenericParam.as.Destroy.impl.Op(%self.param: %ptr.f73) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @ImplsGeneric.as.Destroy.impl.Op(%self.param: %ptr.011) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ImplsGeneric.as.Generic.impl.F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return @@ -667,9 +560,13 @@ fn G() { // CHECK:STDOUT: %CallGenericMethod.specific_fn: = specific_function %CallGenericMethod.ref, @CallGenericMethod(constants.%GenericParam, constants.%Generic.facet) [concrete = constants.%CallGenericMethod.specific_fn] // CHECK:STDOUT: %.loc18_38.2: %GenericParam = bind_value %.loc18_38.1 // CHECK:STDOUT: %CallGenericMethod.call: init %empty_tuple.type = call %CallGenericMethod.specific_fn(%.loc18_38.2) -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.bound: = bound_method %.loc18_36.4, constants.%GenericParam.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%GenericParam, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc18_36.5: %type_where = converted constants.%GenericParam, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc18_36.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.a0a +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.a0a, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc18_36.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.f73 = addr_of %.loc18_36.4 -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.call: init %empty_tuple.type = call %GenericParam.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -713,6 +610,6 @@ fn G() { // CHECK:STDOUT: %pattern_type.loc15_48 => constants.%pattern_type.589 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: } // CHECK:STDOUT: 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 a6eed65cde54..befdee0bf26c 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 @@ -39,15 +39,8 @@ fn F() { // CHECK:STDOUT: %WalkAnimal: %WalkAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.210: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %Goat: type = class_type @Goat [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.06d: = impl_witness @Goat.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] -// CHECK:STDOUT: %pattern_type.396: type = pattern_type %ptr.940 [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.type: type = fn_type @Goat.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op: %Goat.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -55,6 +48,13 @@ fn F() { // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] // CHECK:STDOUT: %pattern_type.ab7: type = pattern_type %Goat [concrete] // CHECK:STDOUT: %WalkAnimal.specific_fn: = specific_function %WalkAnimal, @WalkAnimal(%Animal.facet) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Goat, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.f2a: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.353: %AggregateT.as_type.as.Destroy.impl.Op.type.f2a = struct_value () [concrete] +// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.353, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -112,33 +112,13 @@ fn F() { // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Goat.as.Destroy.impl: @Goat.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.decl: %Goat.as.Destroy.impl.Op.type = fn_decl @Goat.as.Destroy.impl.Op [concrete = constants.%Goat.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.396 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.396 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.940 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: %self: %ptr.940 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Goat.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Goat.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Animal.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Goat { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: impl_decl @Goat.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Goat.as.Destroy.impl.%Goat.as.Destroy.impl.Op.decl), @Goat.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.06d] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -159,8 +139,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Goat.as.Destroy.impl.Op(%self.param: %ptr.940) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %WalkAnimal.ref: %WalkAnimal.type = name_ref WalkAnimal, file.%WalkAnimal.decl [concrete = constants.%WalkAnimal] @@ -177,9 +155,13 @@ fn F() { // CHECK:STDOUT: %WalkAnimal.specific_fn: = specific_function %WalkAnimal.ref, @WalkAnimal(constants.%Animal.facet) [concrete = constants.%WalkAnimal.specific_fn] // CHECK:STDOUT: %.loc23_17.2: %Goat = bind_value %.loc23_17.1 // CHECK:STDOUT: %WalkAnimal.call: init %empty_tuple.type = call %WalkAnimal.specific_fn(%.loc23_17.2) -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.bound: = bound_method %.loc23_15.4, constants.%Goat.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Goat, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc23_15.5: %type_where = converted constants.%Goat, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc23_15.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.353 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.353, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc23_15.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.940 = addr_of %.loc23_15.4 -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Goat.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -195,6 +177,6 @@ fn F() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ab7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: } // CHECK:STDOUT: 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 a14c3a966c2d..20dc9a962d44 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 @@ -111,21 +111,9 @@ fn B() { // CHECK:STDOUT: %Generic.assoc_type.0fd877.1: type = assoc_entity_type @Generic, @Generic(%Scalar) [symbolic] // CHECK:STDOUT: %assoc0.2966cb.1: %Generic.assoc_type.0fd877.1 = assoc_entity element0, @Generic.%Generic.F.decl [symbolic] // CHECK:STDOUT: %GenericParam: type = class_type @GenericParam [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.0fd: = impl_witness @GenericParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.f73: type = ptr_type %GenericParam [concrete] -// CHECK:STDOUT: %pattern_type.7c3: type = pattern_type %ptr.f73 [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.type: type = fn_type @GenericParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op: %GenericParam.as.Destroy.impl.Op.type = 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: %ImplsGeneric: type = class_type @ImplsGeneric [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c8c: = impl_witness @ImplsGeneric.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.011: type = ptr_type %ImplsGeneric [concrete] -// CHECK:STDOUT: %pattern_type.2db: type = pattern_type %ptr.011 [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.type: type = fn_type @ImplsGeneric.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op: %ImplsGeneric.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Generic.type.621: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete] // CHECK:STDOUT: %Self.93d: %Generic.type.621 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Generic.F.type.4cf: type = fn_type @Generic.F, @Generic(%GenericParam) [concrete] @@ -165,6 +153,18 @@ fn B() { // CHECK:STDOUT: %pattern_type.c8d: type = pattern_type %ImplsGeneric [concrete] // CHECK:STDOUT: %pattern_type.589: type = pattern_type %GenericParam [concrete] // CHECK:STDOUT: %CallGenericMethod.specific_fn: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.6cb: %type_where = facet_value %GenericParam, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.13c: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.6cb) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.a0a: %AggregateT.as_type.as.Destroy.impl.Op.type.13c = struct_value () [concrete] +// CHECK:STDOUT: %ptr.f73: type = ptr_type %GenericParam [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.994: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.a0a, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.6cb) [concrete] +// CHECK:STDOUT: %facet_value.004: %type_where = facet_value %ImplsGeneric, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.028: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.004) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.4ac: %AggregateT.as_type.as.Destroy.impl.Op.type.028 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.011: type = ptr_type %ImplsGeneric [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e4a: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.4ac, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.004) [concrete] // CHECK:STDOUT: %complete_type.ca2: = complete_type_witness %Generic.type.621 [concrete] // CHECK:STDOUT: %.573: type = fn_type_with_self_type %Generic.F.type.4cf, %Generic.facet [concrete] // CHECK:STDOUT: } @@ -258,38 +258,6 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @GenericParam.as.Destroy.impl: @GenericParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.decl: %GenericParam.as.Destroy.impl.Op.type = fn_decl @GenericParam.as.Destroy.impl.Op [concrete = constants.%GenericParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.7c3 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.7c3 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.f73 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: %self: %ptr.f73 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %GenericParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @GenericParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @ImplsGeneric.as.Destroy.impl: @ImplsGeneric.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.decl: %ImplsGeneric.as.Destroy.impl.Op.type = fn_decl @ImplsGeneric.as.Destroy.impl.Op [concrete = constants.%ImplsGeneric.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.2db = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.2db = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.011 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: %self: %ptr.011 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %ImplsGeneric.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @ImplsGeneric.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @ImplsGeneric.as.Generic.impl: %ImplsGeneric.ref as %Generic.type { // CHECK:STDOUT: %ImplsGeneric.as.Generic.impl.F.decl: %ImplsGeneric.as.Generic.impl.F.type = fn_decl @ImplsGeneric.as.Generic.impl.F [concrete = constants.%ImplsGeneric.as.Generic.impl.F] {} {} // CHECK:STDOUT: @@ -299,10 +267,6 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @GenericParam { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: impl_decl @GenericParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@GenericParam.as.Destroy.impl.%GenericParam.as.Destroy.impl.Op.decl), @GenericParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.0fd] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -311,10 +275,6 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @ImplsGeneric { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: impl_decl @ImplsGeneric.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@ImplsGeneric.as.Destroy.impl.%ImplsGeneric.as.Destroy.impl.Op.decl), @ImplsGeneric.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c8c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -326,10 +286,6 @@ fn B() { // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @GenericParam.as.Destroy.impl.Op(%self.param: %ptr.f73) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @ImplsGeneric.as.Destroy.impl.Op(%self.param: %ptr.011) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ImplsGeneric.as.Generic.impl.F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return @@ -391,12 +347,20 @@ fn B() { // CHECK:STDOUT: %.loc20_24.2: %ImplsGeneric = bind_value %.loc20_24.1 // CHECK:STDOUT: %.loc20_44.2: %GenericParam = bind_value %.loc20_44.1 // CHECK:STDOUT: %CallGenericMethod.call: init %empty_tuple.type = call %CallGenericMethod.specific_fn(%.loc20_24.2, %.loc20_44.2) -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.bound: = bound_method %.loc20_42.4, constants.%GenericParam.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc20_42: %type_where = facet_value constants.%GenericParam, () [concrete = constants.%facet_value.6cb] +// CHECK:STDOUT: %.loc20_42.5: %type_where = converted constants.%GenericParam, %facet_value.loc20_42 [concrete = constants.%facet_value.6cb] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc20_42: = bound_method %.loc20_42.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.a0a +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.a0a, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.6cb) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.994] +// CHECK:STDOUT: %bound_method.loc20_42: = bound_method %.loc20_42.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc20_42: %ptr.f73 = addr_of %.loc20_42.4 -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.call: init %empty_tuple.type = call %GenericParam.as.Destroy.impl.Op.bound(%addr.loc20_42) -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.bound: = bound_method %.loc20_22.4, constants.%ImplsGeneric.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc20_42: init %empty_tuple.type = call %bound_method.loc20_42(%addr.loc20_42) +// CHECK:STDOUT: %facet_value.loc20_22: %type_where = facet_value constants.%ImplsGeneric, () [concrete = constants.%facet_value.004] +// CHECK:STDOUT: %.loc20_22.5: %type_where = converted constants.%ImplsGeneric, %facet_value.loc20_22 [concrete = constants.%facet_value.004] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc20_22: = bound_method %.loc20_22.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.4ac +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.4ac, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.004) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e4a] +// CHECK:STDOUT: %bound_method.loc20_22: = bound_method %.loc20_22.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc20_22: %ptr.011 = addr_of %.loc20_22.4 -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.call: init %empty_tuple.type = call %ImplsGeneric.as.Destroy.impl.Op.bound(%addr.loc20_22) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc20_22: init %empty_tuple.type = call %bound_method.loc20_22(%addr.loc20_22) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -480,13 +444,6 @@ fn B() { // CHECK:STDOUT: %I.type.892: type = facet_type <@I, @I(%V, %W)> [symbolic] // CHECK:STDOUT: %Self.942: %I.type.892 = bind_symbolic_name Self, 2 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] @@ -511,6 +468,13 @@ fn B() { // CHECK:STDOUT: %I.facet: %I.type.302 = facet_value %C, (%I.impl_witness.6f6) [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %A.specific_fn: = specific_function %A, @A(%I.facet) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -598,22 +562,6 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc7_14.1: type) { // CHECK:STDOUT: %T.loc7_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_14.2 (constants.%T.8b3)] // CHECK:STDOUT: %I.type.loc7_36.2: type = facet_type <@I, @I(%T.loc7_14.2, constants.%empty_tuple.type)> [symbolic = %I.type.loc7_36.2 (constants.%I.type.5cc)] @@ -629,10 +577,6 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -640,8 +584,6 @@ fn B() { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc9_6.2: %I.type.302) { // CHECK:STDOUT: %T.loc9_6.1: %I.type.302 = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.1 (constants.%T.305)] // CHECK:STDOUT: %T.as_type.loc9_24.1: type = facet_access_type %T.loc9_6.1 [symbolic = %T.as_type.loc9_24.1 (constants.%T.as_type)] @@ -672,9 +614,13 @@ fn B() { // CHECK:STDOUT: %A.specific_fn: = specific_function %A.ref, @A(constants.%I.facet) [concrete = constants.%A.specific_fn] // CHECK:STDOUT: %.loc12_8.2: %C = bind_value %.loc12_8.1 // CHECK:STDOUT: %A.call: init %empty_tuple.type = call %A.specific_fn(%.loc12_8.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc12_6.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc12_6.5: %type_where = converted constants.%C, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc12_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc12_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.019 = addr_of %.loc12_6.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -746,15 +692,8 @@ fn B() { // CHECK:STDOUT: %I.type.892: type = facet_type <@I, @I(%V, %W)> [symbolic] // CHECK:STDOUT: %Self.942: %I.type.892 = bind_symbolic_name Self, 2 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %I.type.5cc: type = facet_type <@I, @I(%T.8b3, %empty_tuple.type)> [symbolic] // CHECK:STDOUT: %Self.4c1: %I.type.5cc = bind_symbolic_name Self, 2 [symbolic] @@ -772,6 +711,13 @@ fn B() { // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -859,22 +805,6 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc7_14.1: type) { // CHECK:STDOUT: %T.loc7_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_14.2 (constants.%T.8b3)] // CHECK:STDOUT: %I.type.loc7_36.2: type = facet_type <@I, @I(%T.loc7_14.2, constants.%empty_tuple.type)> [symbolic = %I.type.loc7_36.2 (constants.%I.type.5cc)] @@ -890,19 +820,13 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc9_6.2: %I.type.1c6) { // CHECK:STDOUT: %T.loc9_6.1: %I.type.1c6 = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.1 (constants.%T.034)] // CHECK:STDOUT: %T.as_type.loc9_24.1: type = facet_access_type %T.loc9_6.1 [symbolic = %T.as_type.loc9_24.1 (constants.%T.as_type)] @@ -926,9 +850,13 @@ fn B() { // CHECK:STDOUT: %.loc19_6.3: init %C = class_init (), %.loc19_6.2 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc19_6.4: ref %C = temporary %.loc19_6.2, %.loc19_6.3 // CHECK:STDOUT: %.loc19_8: ref %C = converted %.loc19_6.1, %.loc19_6.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc19_6.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc19_6.5: %type_where = converted constants.%C, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc19_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc19_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.019 = addr_of %.loc19_6.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -982,15 +910,8 @@ fn B() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.c6b: type = class_type @C, @C(%V, %W) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.585: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%V, %W) [symbolic] -// CHECK:STDOUT: %ptr.1cf: type = ptr_type %C.c6b [symbolic] -// CHECK:STDOUT: %pattern_type.b68: type = pattern_type %ptr.1cf [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.0aa: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%V, %W) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.076: %C.as.Destroy.impl.Op.type.0aa = 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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %C.463: type = class_type @C, @C(%T.8b3, %empty_tuple.type) [symbolic] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table, @C.as.I.impl(%T.8b3) [symbolic] @@ -1005,12 +926,13 @@ fn B() { // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %C.c74: type = class_type @C, @C(%empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %C.val: %C.c74 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.39d: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%empty_struct_type, %empty_struct_type) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.175: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%empty_struct_type, %empty_struct_type) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.207: %C.as.Destroy.impl.Op.type.175 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C.c74, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.26f: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.64f: %AggregateT.as_type.as.Destroy.impl.Op.type.26f = struct_value () [concrete] // CHECK:STDOUT: %ptr.128: type = ptr_type %C.c74 [concrete] -// CHECK:STDOUT: %pattern_type.dfd: type = pattern_type %ptr.128 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function %C.as.Destroy.impl.Op.207, @C.as.Destroy.impl.Op(%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.64f, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1084,36 +1006,6 @@ fn B() { // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%V.loc5_9.2: type, @C.%W.loc5_19.2: type) { -// CHECK:STDOUT: %V: type = bind_symbolic_name V, 0 [symbolic = %V (constants.%V)] -// CHECK:STDOUT: %W: type = bind_symbolic_name W, 1 [symbolic = %W (constants.%W)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%V, %W) [symbolic = %C (constants.%C.c6b)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%V, %W) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.585)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%V, %W) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.0aa)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.0aa) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.076)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.0aa) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.076)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.b68) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.b68) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_29.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.1cf) = value_param call_param0 -// CHECK:STDOUT: %.loc5_29.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.c6b)] { -// CHECK:STDOUT: %.loc5_29.3: type = specific_constant constants.%C.c6b, @C(constants.%V, constants.%W) [symbolic = %C (constants.%C.c6b)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_29.3 [symbolic = %C (constants.%C.c6b)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.1cf) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc7_14.1: type) { // CHECK:STDOUT: %T.loc7_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_14.2 (constants.%T.8b3)] // CHECK:STDOUT: %C.loc7_31.2: type = class_type @C, @C(%T.loc7_14.2, constants.%empty_tuple.type) [symbolic = %C.loc7_31.2 (constants.%C.463)] @@ -1134,11 +1026,7 @@ fn B() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.c6b [symbolic = @C.as.Destroy.impl.%C (constants.%C.c6b)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%V, constants.%W) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.585)] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -1146,18 +1034,6 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%V.loc5_9.2: type, @C.%W.loc5_19.2: type) { -// CHECK:STDOUT: %V: type = bind_symbolic_name V, 0 [symbolic = %V (constants.%V)] -// CHECK:STDOUT: %W: type = bind_symbolic_name W, 1 [symbolic = %W (constants.%W)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%V, %W) [symbolic = %C (constants.%C.c6b)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.1cf)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.b68)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.1cf)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc9_6.2: %I.type) { // CHECK:STDOUT: %T.loc9_6.1: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.1 (constants.%T.7ee)] // CHECK:STDOUT: %T.as_type.loc9_16.1: type = facet_access_type %T.loc9_6.1 [symbolic = %T.as_type.loc9_16.1 (constants.%T.as_type)] @@ -1186,11 +1062,13 @@ fn B() { // CHECK:STDOUT: %.loc19_6.3: init %C.c74 = class_init (), %.loc19_6.2 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc19_6.4: ref %C.c74 = temporary %.loc19_6.2, %.loc19_6.3 // CHECK:STDOUT: %.loc19_8: ref %C.c74 = converted %.loc19_6.1, %.loc19_6.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc19_6.4, constants.%C.as.Destroy.impl.Op.207 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function constants.%C.as.Destroy.impl.Op.207, @C.as.Destroy.impl.Op(constants.%empty_struct_type, constants.%empty_struct_type) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %.loc19_6.4, %C.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C.c74, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc19_6.5: %type_where = converted constants.%C.c74, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc19_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.64f +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.64f, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc19_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.128 = addr_of %.loc19_6.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1199,21 +1077,6 @@ fn B() { // CHECK:STDOUT: %W.loc5_19.1 => constants.%W // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%V, constants.%W) { -// CHECK:STDOUT: %V => constants.%V -// CHECK:STDOUT: %W => constants.%W -// CHECK:STDOUT: %C => constants.%C.c6b -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.585 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%V, constants.%W) { -// CHECK:STDOUT: %V => constants.%V -// CHECK:STDOUT: %W => constants.%W -// CHECK:STDOUT: %C => constants.%C.c6b -// CHECK:STDOUT: %ptr => constants.%ptr.1cf -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b68 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T.8b3, constants.%empty_tuple.type) { // CHECK:STDOUT: %V.loc5_9.1 => constants.%T.8b3 // CHECK:STDOUT: %W.loc5_19.1 => constants.%empty_tuple.type @@ -1238,22 +1101,3 @@ fn B() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%empty_struct_type, constants.%empty_struct_type) { -// CHECK:STDOUT: %V => constants.%empty_struct_type -// CHECK:STDOUT: %W => constants.%empty_struct_type -// CHECK:STDOUT: %C => constants.%C.c74 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.39d -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.175 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.207 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%empty_struct_type, constants.%empty_struct_type) { -// CHECK:STDOUT: %V => constants.%empty_struct_type -// CHECK:STDOUT: %W => constants.%empty_struct_type -// CHECK:STDOUT: %C => constants.%C.c74 -// CHECK:STDOUT: %ptr => constants.%ptr.128 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dfd -// CHECK:STDOUT: } -// CHECK:STDOUT: 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 c8754674f085..2a45e1ab8788 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 @@ -97,10 +97,10 @@ fn F[A:! J, B:! A](x: C(A, B)) { // CHECK:STDOUT: %Eats.type: type = facet_type <@Eats> [concrete] // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Goat: type = class_type @Goat [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %Eats.impl_witness: = impl_witness file.%Eats.impl_witness_table [concrete] // 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: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] // CHECK:STDOUT: %Eats.facet: %Eats.type = facet_value %Goat, (%Eats.impl_witness) [concrete] @@ -143,14 +143,16 @@ fn F[A:! J, B:! A](x: C(A, B)) { // CHECK:STDOUT: %Goat.as.Eats.impl.Eat.type: type = fn_type @Goat.as.Eats.impl.Eat [concrete] // CHECK:STDOUT: %Goat.as.Eats.impl.Eat: %Goat.as.Eats.impl.Eat.type = struct_value () [concrete] // CHECK:STDOUT: %Eats.facet: %Eats.type = facet_value %Goat, (%Eats.impl_witness) [concrete] -// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.type: type = fn_type @Goat.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op: %Goat.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] // CHECK:STDOUT: %pattern_type.ab7: type = pattern_type %Goat [concrete] // CHECK:STDOUT: %Goat.val: %Goat = struct_value () [concrete] // CHECK:STDOUT: %.843: type = fn_type_with_self_type %Eats.Eat.type, %Eats.facet [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Goat, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.f2a: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.353: %AggregateT.as_type.as.Destroy.impl.Op.type.f2a = struct_value () [concrete] +// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -213,15 +215,27 @@ fn F[A:! J, B:! A](x: C(A, B)) { // CHECK:STDOUT: %Eat.ref.loc27: %Eats.assoc_type = name_ref Eat, @Eats.%assoc0 [concrete = constants.%assoc0.e43] // CHECK:STDOUT: %impl.elem0.loc27: %.843 = impl_witness_access constants.%Eats.impl_witness, element0 [concrete = constants.%Goat.as.Eats.impl.Eat] // CHECK:STDOUT: %Goat.as.Eats.impl.Eat.call.loc27: init %empty_tuple.type = call %impl.elem0.loc27() -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.bound.loc27: = bound_method %.loc27_6.4, constants.%Goat.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc27: %type_where = facet_value constants.%Goat, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc27_6.5: %type_where = converted constants.%Goat, %facet_value.loc27 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc27: = bound_method %.loc27_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.353 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc27: = bound_method %.loc27_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc27: %ptr.940 = addr_of %.loc27_6.4 -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.call.loc27: init %empty_tuple.type = call %Goat.as.Destroy.impl.Op.bound.loc27(%addr.loc27) -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.bound.loc26: = bound_method %.loc26_6.4, constants.%Goat.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc27: init %empty_tuple.type = call %bound_method.loc27(%addr.loc27) +// CHECK:STDOUT: %facet_value.loc26: %type_where = facet_value constants.%Goat, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc26_6.5: %type_where = converted constants.%Goat, %facet_value.loc26 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc26: = bound_method %.loc26_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.353 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc26: = bound_method %.loc26_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc26: %ptr.940 = addr_of %.loc26_6.4 -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.call.loc26: init %empty_tuple.type = call %Goat.as.Destroy.impl.Op.bound.loc26(%addr.loc26) -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.bound.loc22: = bound_method %.loc22_28.4, constants.%Goat.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc26: init %empty_tuple.type = call %bound_method.loc26(%addr.loc26) +// CHECK:STDOUT: %facet_value.loc22: %type_where = facet_value constants.%Goat, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc22_28.5: %type_where = converted constants.%Goat, %facet_value.loc22 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc22: = bound_method %.loc22_28.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.353 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc22: = bound_method %.loc22_28.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc22: %ptr.940 = addr_of %.loc22_28.4 -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %Goat.as.Destroy.impl.Op.bound.loc22(%addr.loc22) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22) // CHECK:STDOUT: // 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 548c04a2dacc..3a55a729de50 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon @@ -29,11 +29,11 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] -// CHECK:STDOUT: %Self.611: %Animal.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %T: %Animal.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.3c3: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Animal.type [concrete] // 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] @@ -41,13 +41,6 @@ fn F() { // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %FeedAnimal.specific_fn.a33: = specific_function %FeedAnimal, @FeedAnimal(%T) [symbolic] // CHECK:STDOUT: %Goat: type = class_type @Goat [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Goat.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] -// CHECK:STDOUT: %pattern_type.396: type = pattern_type %ptr.940 [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.type: type = fn_type @Goat.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op: %Goat.as.Destroy.impl.Op.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: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] @@ -60,11 +53,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -79,7 +70,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.3c3 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc17: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -88,7 +79,7 @@ fn F() { // CHECK:STDOUT: %T.loc17_15.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc17_15.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt: %pattern_type.3c3 = symbolic_binding_pattern T, 0 [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc19: type = splice_block %Animal.ref [concrete = constants.%Animal.type] { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -107,39 +98,19 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { -// CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.611] +// CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Goat.as.Destroy.impl: @Goat.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.decl: %Goat.as.Destroy.impl.Op.type = fn_decl @Goat.as.Destroy.impl.Op [concrete = constants.%Goat.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.396 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.396 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc21: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.940 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: %self: %ptr.940 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Goat.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Goat.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Animal.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Goat { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: impl_decl @Goat.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Goat.as.Destroy.impl.%Goat.as.Destroy.impl.Op.decl), @Goat.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -174,8 +145,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Goat.as.Destroy.impl.Op(%self.param: %ptr.940) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %HandleAnimal.ref: %HandleAnimal.type = name_ref HandleAnimal, file.%HandleAnimal.decl [concrete = constants.%HandleAnimal] 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 7670c1d0996b..969b0448060e 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 @@ -41,14 +41,6 @@ fn F() { // CHECK:STDOUT: %Edible.type: type = facet_type <@Edible> [concrete] // CHECK:STDOUT: %Self.f09: %Edible.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Grass: type = class_type @Grass [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.fac: = impl_witness @Grass.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.2bd: type = ptr_type %Grass [concrete] -// CHECK:STDOUT: %pattern_type.4f0: type = pattern_type %ptr.2bd [concrete] -// CHECK:STDOUT: %Grass.as.Destroy.impl.Op.type: type = fn_type @Grass.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Grass.as.Destroy.impl.Op: %Grass.as.Destroy.impl.Op.type = 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: %Edible.impl_witness: = impl_witness file.%Edible.impl_witness_table [concrete] @@ -59,6 +51,7 @@ fn F() { // CHECK:STDOUT: %Food.8b3: type = bind_symbolic_name Food, 0 [symbolic] // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %Eats.type.ba2: type = generic_interface_type @Eats [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Eats.generic: %Eats.type.ba2 = struct_value () [concrete] // CHECK:STDOUT: %Eats.type.7fe: type = facet_type <@Eats, @Eats(%Food.8b3)> [symbolic] // CHECK:STDOUT: %Self.cc0: %Eats.type.7fe = bind_symbolic_name Self, 1 [symbolic] @@ -73,11 +66,6 @@ fn F() { // CHECK:STDOUT: %require_complete.1cbba0.1: = require_complete_type %Eats.type.130190.1 [symbolic] // CHECK:STDOUT: %Eats.impl_witness.b17e2e.1: = impl_witness file.%Eats.impl_witness_table, @T.as_type.as.Eats.impl(%T.611, %U) [symbolic] // CHECK:STDOUT: %Goat: type = class_type @Goat [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.06d: = impl_witness @Goat.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] -// CHECK:STDOUT: %pattern_type.396: type = pattern_type %ptr.940 [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.type: type = fn_type @Goat.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op: %Goat.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %Food.f09: %Edible.type = bind_symbolic_name Food, 0 [symbolic] // CHECK:STDOUT: %Food.as_type.b80: type = facet_access_type %Food.f09 [symbolic] @@ -116,6 +104,18 @@ fn F() { // CHECK:STDOUT: %pattern_type.ab7: type = pattern_type %Goat [concrete] // CHECK:STDOUT: %pattern_type.aff: type = pattern_type %Grass [concrete] // CHECK:STDOUT: %HandleAnimal.specific_fn: = specific_function %HandleAnimal, @HandleAnimal(%Animal.facet, %Edible.facet) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.c0f: %type_where = facet_value %Grass, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.7e4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.c0f) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.d49: %AggregateT.as_type.as.Destroy.impl.Op.type.7e4 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.2bd: type = ptr_type %Grass [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.6af: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.d49, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.c0f) [concrete] +// CHECK:STDOUT: %facet_value.8dd: %type_where = facet_value %Goat, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.f2a: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.8dd) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.353: %AggregateT.as_type.as.Destroy.impl.Op.type.f2a = struct_value () [concrete] +// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.89e: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.353, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.8dd) [concrete] // CHECK:STDOUT: %Eats.type.cee: type = facet_type <@Eats, @Eats(%Grass)> [concrete] // CHECK:STDOUT: %Self.16a: %Eats.type.cee = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %complete_type.eba: = complete_type_witness %Eats.type.cee [concrete] @@ -303,22 +303,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Grass.as.Destroy.impl: @Grass.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Grass.as.Destroy.impl.Op.decl: %Grass.as.Destroy.impl.Op.type = fn_decl @Grass.as.Destroy.impl.Op [concrete = constants.%Grass.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.4f0 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.4f0 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.2bd = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Grass [concrete = constants.%Grass] -// CHECK:STDOUT: %self: %ptr.2bd = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Grass.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Grass.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @Grass.as.Edible.impl: %Grass.ref as %Edible.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Edible.impl_witness @@ -341,32 +325,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Goat.as.Destroy.impl: @Goat.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.decl: %Goat.as.Destroy.impl.Op.type = fn_decl @Goat.as.Destroy.impl.Op [concrete = constants.%Goat.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.396 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.396 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc28: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.940 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: %self: %ptr.940 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Goat.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Goat.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Animal.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Grass { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Grass [concrete = constants.%Grass] -// CHECK:STDOUT: impl_decl @Grass.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Grass.as.Destroy.impl.%Grass.as.Destroy.impl.Op.decl), @Grass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.fac] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -375,10 +339,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Goat { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: impl_decl @Goat.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Goat.as.Destroy.impl.%Goat.as.Destroy.impl.Op.decl), @Goat.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.06d] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -386,10 +346,6 @@ fn F() { // CHECK:STDOUT: .Self = constants.%Goat // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Grass.as.Destroy.impl.Op(%self.param: %ptr.2bd) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Goat.as.Destroy.impl.Op(%self.param: %ptr.940) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%Food.loc31_9.2: %Edible.type, %T.loc31_24.2: @Feed.%Eats.type.loc31_37.1 (%Eats.type.ed1)) { // CHECK:STDOUT: %Food.loc31_9.1: %Edible.type = bind_symbolic_name Food, 0 [symbolic = %Food.loc31_9.1 (constants.%Food.f09)] // CHECK:STDOUT: %Food.as_type.loc31_37.1: type = facet_access_type %Food.loc31_9.1 [symbolic = %Food.as_type.loc31_37.1 (constants.%Food.as_type.b80)] @@ -472,12 +428,20 @@ fn F() { // CHECK:STDOUT: %.loc35_19.2: %Goat = bind_value %.loc35_19.1 // CHECK:STDOUT: %.loc35_31.2: %Grass = bind_value %.loc35_31.1 // CHECK:STDOUT: %HandleAnimal.call: init %empty_tuple.type = call %HandleAnimal.specific_fn(%.loc35_19.2, %.loc35_31.2) -// CHECK:STDOUT: %Grass.as.Destroy.impl.Op.bound: = bound_method %.loc35_29.4, constants.%Grass.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc35_29: %type_where = facet_value constants.%Grass, () [concrete = constants.%facet_value.c0f] +// CHECK:STDOUT: %.loc35_29.5: %type_where = converted constants.%Grass, %facet_value.loc35_29 [concrete = constants.%facet_value.c0f] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc35_29: = bound_method %.loc35_29.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.d49 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.d49, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.c0f) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.6af] +// CHECK:STDOUT: %bound_method.loc35_29: = bound_method %.loc35_29.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc35_29: %ptr.2bd = addr_of %.loc35_29.4 -// CHECK:STDOUT: %Grass.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Grass.as.Destroy.impl.Op.bound(%addr.loc35_29) -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.bound: = bound_method %.loc35_17.4, constants.%Goat.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc35_29: init %empty_tuple.type = call %bound_method.loc35_29(%addr.loc35_29) +// CHECK:STDOUT: %facet_value.loc35_17: %type_where = facet_value constants.%Goat, () [concrete = constants.%facet_value.8dd] +// CHECK:STDOUT: %.loc35_17.5: %type_where = converted constants.%Goat, %facet_value.loc35_17 [concrete = constants.%facet_value.8dd] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc35_17: = bound_method %.loc35_17.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.353 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.353, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.8dd) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.89e] +// CHECK:STDOUT: %bound_method.loc35_17: = bound_method %.loc35_17.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc35_17: %ptr.940 = addr_of %.loc35_17.4 -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Goat.as.Destroy.impl.Op.bound(%addr.loc35_17) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc35_17: init %empty_tuple.type = call %bound_method.loc35_17(%addr.loc35_17) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: 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 35bccef836e5..14aa1d461645 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 @@ -44,15 +44,8 @@ fn F() { // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %FeedAnimal.specific_fn.a33: = specific_function %FeedAnimal, @FeedAnimal(%T) [symbolic] // CHECK:STDOUT: %Goat: type = class_type @Goat [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.06d: = impl_witness @Goat.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] -// CHECK:STDOUT: %pattern_type.396: type = pattern_type %ptr.940 [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.type: type = fn_type @Goat.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op: %Goat.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -60,6 +53,13 @@ fn F() { // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] // CHECK:STDOUT: %pattern_type.ab7: type = pattern_type %Goat [concrete] // CHECK:STDOUT: %HandleAnimal.specific_fn: = specific_function %HandleAnimal, @HandleAnimal(%Animal.facet) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Goat, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.f2a: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.353: %AggregateT.as_type.as.Destroy.impl.Op.type.f2a = struct_value () [concrete] +// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.353, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: %FeedAnimal.specific_fn.2ba: = specific_function %FeedAnimal, @FeedAnimal(%Animal.facet) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -137,33 +137,13 @@ fn F() { // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Goat.as.Destroy.impl: @Goat.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.decl: %Goat.as.Destroy.impl.Op.type = fn_decl @Goat.as.Destroy.impl.Op [concrete = constants.%Goat.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.396 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.396 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc21: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.940 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: %self: %ptr.940 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Goat.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Goat.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Animal.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Goat { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: impl_decl @Goat.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Goat.as.Destroy.impl.%Goat.as.Destroy.impl.Op.decl), @Goat.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.06d] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -205,8 +185,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Goat.as.Destroy.impl.Op(%self.param: %ptr.940) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %HandleAnimal.ref: %HandleAnimal.type = name_ref HandleAnimal, file.%HandleAnimal.decl [concrete = constants.%HandleAnimal] @@ -223,9 +201,13 @@ fn F() { // CHECK:STDOUT: %HandleAnimal.specific_fn: = specific_function %HandleAnimal.ref, @HandleAnimal(constants.%Animal.facet) [concrete = constants.%HandleAnimal.specific_fn] // CHECK:STDOUT: %.loc25_19.2: %Goat = bind_value %.loc25_19.1 // CHECK:STDOUT: %HandleAnimal.call: init %empty_tuple.type = call %HandleAnimal.specific_fn(%.loc25_19.2) -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.bound: = bound_method %.loc25_17.4, constants.%Goat.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Goat, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc25_17.5: %type_where = converted constants.%Goat, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc25_17.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.353 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.353, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc25_17.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.940 = addr_of %.loc25_17.4 -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Goat.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -250,7 +232,7 @@ fn F() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ab7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: %FeedAnimal.specific_fn.loc19_37.2 => constants.%FeedAnimal.specific_fn.2ba // CHECK:STDOUT: } // CHECK:STDOUT: @@ -260,6 +242,6 @@ fn F() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ab7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: } // CHECK:STDOUT: 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 2f56c0962e98..2a03b96e1cfc 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 @@ -53,27 +53,10 @@ fn G() { // CHECK:STDOUT: %Generic.assoc_type.0fd: type = assoc_entity_type @Generic, @Generic(%Scalar) [symbolic] // CHECK:STDOUT: %assoc0.296: %Generic.assoc_type.0fd = assoc_entity element0, @Generic.%Generic.F.decl [symbolic] // CHECK:STDOUT: %GenericParam: type = class_type @GenericParam [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.0fd: = impl_witness @GenericParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.f73: type = ptr_type %GenericParam [concrete] -// CHECK:STDOUT: %pattern_type.7c3: type = pattern_type %ptr.f73 [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.type: type = fn_type @GenericParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op: %GenericParam.as.Destroy.impl.Op.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: %WrongGenericParam: type = class_type @WrongGenericParam [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.dac: = impl_witness @WrongGenericParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.397: type = ptr_type %WrongGenericParam [concrete] -// CHECK:STDOUT: %pattern_type.396: type = pattern_type %ptr.397 [concrete] -// CHECK:STDOUT: %WrongGenericParam.as.Destroy.impl.Op.type: type = fn_type @WrongGenericParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %WrongGenericParam.as.Destroy.impl.Op: %WrongGenericParam.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ImplsGeneric: type = class_type @ImplsGeneric [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c8c: = impl_witness @ImplsGeneric.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.011: type = ptr_type %ImplsGeneric [concrete] -// CHECK:STDOUT: %pattern_type.2db: type = pattern_type %ptr.011 [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.type: type = fn_type @ImplsGeneric.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op: %ImplsGeneric.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Generic.type.621: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete] // CHECK:STDOUT: %Self.93d: %Generic.type.621 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Generic.F.type.4cf: type = fn_type @Generic.F, @Generic(%GenericParam) [concrete] @@ -96,11 +79,9 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -171,54 +152,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @GenericParam.as.Destroy.impl: @GenericParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.decl: %GenericParam.as.Destroy.impl.Op.type = fn_decl @GenericParam.as.Destroy.impl.Op [concrete = constants.%GenericParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.7c3 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.7c3 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.f73 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: %self: %ptr.f73 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %GenericParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @GenericParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @WrongGenericParam.as.Destroy.impl: @WrongGenericParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %WrongGenericParam.as.Destroy.impl.Op.decl: %WrongGenericParam.as.Destroy.impl.Op.type = fn_decl @WrongGenericParam.as.Destroy.impl.Op [concrete = constants.%WrongGenericParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.396 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.396 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc20: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.397 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%WrongGenericParam [concrete = constants.%WrongGenericParam] -// CHECK:STDOUT: %self: %ptr.397 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %WrongGenericParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @WrongGenericParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @ImplsGeneric.as.Destroy.impl: @ImplsGeneric.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.decl: %ImplsGeneric.as.Destroy.impl.Op.type = fn_decl @ImplsGeneric.as.Destroy.impl.Op [concrete = constants.%ImplsGeneric.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.2db = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.2db = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc22: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.011 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: %self: %ptr.011 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %ImplsGeneric.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @ImplsGeneric.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @ImplsGeneric.as.Generic.impl: %ImplsGeneric.ref as %Generic.type { // CHECK:STDOUT: %ImplsGeneric.as.Generic.impl.F.decl: %ImplsGeneric.as.Generic.impl.F.type = fn_decl @ImplsGeneric.as.Generic.impl.F [concrete = constants.%ImplsGeneric.as.Generic.impl.F] {} {} // CHECK:STDOUT: @@ -228,10 +161,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @GenericParam { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: impl_decl @GenericParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@GenericParam.as.Destroy.impl.%GenericParam.as.Destroy.impl.Op.decl), @GenericParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.0fd] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -240,10 +169,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @WrongGenericParam { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%WrongGenericParam [concrete = constants.%WrongGenericParam] -// CHECK:STDOUT: impl_decl @WrongGenericParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@WrongGenericParam.as.Destroy.impl.%WrongGenericParam.as.Destroy.impl.Op.decl), @WrongGenericParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.dac] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -252,10 +177,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @ImplsGeneric { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: impl_decl @ImplsGeneric.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@ImplsGeneric.as.Destroy.impl.%ImplsGeneric.as.Destroy.impl.Op.decl), @ImplsGeneric.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c8c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -267,12 +188,6 @@ fn G() { // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @GenericParam.as.Destroy.impl.Op(%self.param: %ptr.f73) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @WrongGenericParam.as.Destroy.impl.Op(%self.param: %ptr.397) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @ImplsGeneric.as.Destroy.impl.Op(%self.param: %ptr.011) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ImplsGeneric.as.Generic.impl.F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return 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 14094b5407ed..a68b44ce077a 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 @@ -35,15 +35,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] -// CHECK:STDOUT: %Self.611: %Animal.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Goat: type = class_type @Goat [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Goat.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.940: type = ptr_type %Goat [concrete] -// CHECK:STDOUT: %pattern_type.396: type = pattern_type %ptr.940 [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.type: type = fn_type @Goat.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op: %Goat.as.Destroy.impl.Op.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: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] @@ -61,11 +54,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -98,39 +89,19 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { -// CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.611] +// CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Goat.as.Destroy.impl: @Goat.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Goat.as.Destroy.impl.Op.decl: %Goat.as.Destroy.impl.Op.type = fn_decl @Goat.as.Destroy.impl.Op [concrete = constants.%Goat.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.396 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.396 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.940 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: %self: %ptr.940 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Goat.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Goat.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Animal.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Goat { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Goat [concrete = constants.%Goat] -// CHECK:STDOUT: impl_decl @Goat.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Goat.as.Destroy.impl.%Goat.as.Destroy.impl.Op.decl), @Goat.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -138,8 +109,6 @@ fn F() { // CHECK:STDOUT: .Self = constants.%Goat // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Goat.as.Destroy.impl.Op(%self.param: %ptr.940) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @WalkAnimal(%a.loc20_15.2: %Animal.type) { // CHECK:STDOUT: %a.loc20_15.1: %Animal.type = bind_symbolic_name a, 0 [symbolic = %a.loc20_15.1 (constants.%a)] // 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 dfa253ed4397..68cb40409160 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 @@ -53,27 +53,10 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] // CHECK:STDOUT: %HoldsType.cc9: type = class_type @HoldsType, @HoldsType(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cc4: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.47e: type = ptr_type %HoldsType.cc9 [symbolic] -// CHECK:STDOUT: %pattern_type.c39: type = pattern_type %ptr.47e [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op: %HoldsType.as.Destroy.impl.Op.type = 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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %RuntimeConvertFrom: type = class_type @RuntimeConvertFrom [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.6db: = impl_witness @RuntimeConvertFrom.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.415: type = ptr_type %RuntimeConvertFrom [concrete] -// CHECK:STDOUT: %pattern_type.b92: type = pattern_type %ptr.415 [concrete] -// CHECK:STDOUT: %RuntimeConvertFrom.as.Destroy.impl.Op.type: type = fn_type @RuntimeConvertFrom.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %RuntimeConvertFrom.as.Destroy.impl.Op: %RuntimeConvertFrom.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %RuntimeConvertTo: type = class_type @RuntimeConvertTo [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.4cc: = impl_witness @RuntimeConvertTo.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.339: type = ptr_type %RuntimeConvertTo [concrete] -// CHECK:STDOUT: %pattern_type.a4a: type = pattern_type %ptr.339 [concrete] -// CHECK:STDOUT: %RuntimeConvertTo.as.Destroy.impl.Op.type: type = fn_type @RuntimeConvertTo.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %RuntimeConvertTo.as.Destroy.impl.Op: %RuntimeConvertTo.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.b66: type = facet_type <@ImplicitAs, @ImplicitAs(%RuntimeConvertTo)> [concrete] @@ -102,17 +85,29 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %RuntimeConvertFrom.val: %RuntimeConvertFrom = struct_value () [concrete] // CHECK:STDOUT: %.838: type = fn_type_with_self_type %ImplicitAs.Convert.type.50a, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %RuntimeConvertFrom.as.ImplicitAs.impl.Convert.bound: = bound_method %from, %RuntimeConvertFrom.as.ImplicitAs.impl.Convert [symbolic] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.d7d: %type_where = facet_value %RuntimeConvertTo, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d4d: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d7d) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.c9f: %AggregateT.as_type.as.Destroy.impl.Op.type.d4d = struct_value () [concrete] +// CHECK:STDOUT: %ptr.339: type = ptr_type %RuntimeConvertTo [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e71: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.c9f, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d7d) [concrete] +// CHECK:STDOUT: %facet_value.631: %type_where = facet_value %RuntimeConvertFrom, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.abd: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.631) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.58a: %AggregateT.as_type.as.Destroy.impl.Op.type.abd = struct_value () [concrete] +// CHECK:STDOUT: %ptr.415: type = ptr_type %RuntimeConvertFrom [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.b86: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.58a, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.631) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// 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.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -190,67 +185,6 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @HoldsType.as.Destroy.impl(@HoldsType.%T.loc17_17.2: %tuple.type) { -// CHECK:STDOUT: %T: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @HoldsType.%Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.cc4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.type: type = fn_type @HoldsType.as.Destroy.impl.Op, @HoldsType.as.Destroy.impl(%T) [symbolic = %HoldsType.as.Destroy.impl.Op.type (constants.%HoldsType.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type) = struct_value () [symbolic = %HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @HoldsType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %HoldsType.as.Destroy.impl.Op.decl: @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.type (%HoldsType.as.Destroy.impl.Op.type) = fn_decl @HoldsType.as.Destroy.impl.Op [symbolic = @HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op (constants.%HoldsType.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.c39) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @HoldsType.as.Destroy.impl.Op.%pattern_type (%pattern_type.c39) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17_31.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.47e) = value_param call_param0 -// CHECK:STDOUT: %.loc17_31.2: type = splice_block %Self.ref [symbolic = %HoldsType (constants.%HoldsType.cc9)] { -// CHECK:STDOUT: %.loc17_31.3: type = specific_constant constants.%HoldsType.cc9, @HoldsType(constants.%T) [symbolic = %HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc17_31.3 [symbolic = %HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.47e) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %HoldsType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @HoldsType.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @RuntimeConvertFrom.as.Destroy.impl: @RuntimeConvertFrom.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %RuntimeConvertFrom.as.Destroy.impl.Op.decl: %RuntimeConvertFrom.as.Destroy.impl.Op.type = fn_decl @RuntimeConvertFrom.as.Destroy.impl.Op [concrete = constants.%RuntimeConvertFrom.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.b92 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.b92 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.415 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%RuntimeConvertFrom [concrete = constants.%RuntimeConvertFrom] -// CHECK:STDOUT: %self: %ptr.415 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %RuntimeConvertFrom.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @RuntimeConvertFrom.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @RuntimeConvertTo.as.Destroy.impl: @RuntimeConvertTo.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %RuntimeConvertTo.as.Destroy.impl.Op.decl: %RuntimeConvertTo.as.Destroy.impl.Op.type = fn_decl @RuntimeConvertTo.as.Destroy.impl.Op [concrete = constants.%RuntimeConvertTo.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a4a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a4a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc20: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.339 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%RuntimeConvertTo [concrete = constants.%RuntimeConvertTo] -// CHECK:STDOUT: %self: %ptr.339 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %RuntimeConvertTo.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @RuntimeConvertTo.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.f64 = binding_pattern self [concrete] @@ -278,11 +212,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%HoldsType.cc9 [symbolic = @HoldsType.as.Destroy.impl.%HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: impl_decl @HoldsType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@HoldsType.as.Destroy.impl.%HoldsType.as.Destroy.impl.Op.decl), @HoldsType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @HoldsType.as.Destroy.impl(constants.%T) [symbolic = @HoldsType.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.cc4)] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -291,11 +221,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @RuntimeConvertFrom { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%RuntimeConvertFrom [concrete = constants.%RuntimeConvertFrom] -// CHECK:STDOUT: impl_decl @RuntimeConvertFrom.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@RuntimeConvertFrom.as.Destroy.impl.%RuntimeConvertFrom.as.Destroy.impl.Op.decl), @RuntimeConvertFrom.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.6db] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -303,32 +229,13 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @RuntimeConvertTo { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%RuntimeConvertTo [concrete = constants.%RuntimeConvertTo] -// CHECK:STDOUT: impl_decl @RuntimeConvertTo.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@RuntimeConvertTo.as.Destroy.impl.%RuntimeConvertTo.as.Destroy.impl.Op.decl), @RuntimeConvertTo.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.4cc] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%RuntimeConvertTo // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @HoldsType.as.Destroy.impl.Op(@HoldsType.%T.loc17_17.2: %tuple.type) { -// CHECK:STDOUT: %T: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic = %HoldsType (constants.%HoldsType.cc9)] -// CHECK:STDOUT: %ptr: type = ptr_type %HoldsType [symbolic = %ptr (constants.%ptr.47e)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.c39)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @HoldsType.as.Destroy.impl.Op.%ptr (%ptr.47e)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @RuntimeConvertFrom.as.Destroy.impl.Op(%self.param: %ptr.415) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @RuntimeConvertTo.as.Destroy.impl.Op(%self.param: %ptr.339) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @RuntimeConvertFrom.as.ImplicitAs.impl.Convert(%self.param: %RuntimeConvertFrom) -> %return.param: %RuntimeConvertTo { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc24_58.1: %empty_struct_type = struct_literal () @@ -375,20 +282,28 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %from.ref: %RuntimeConvertFrom = name_ref from, %from [symbolic = constants.%from] // CHECK:STDOUT: %holds_to.ref: %HoldsType.066 = name_ref holds_to, %holds_to // CHECK:STDOUT: %impl.elem0: %.838 = impl_witness_access constants.%ImplicitAs.impl_witness, element0 [concrete = constants.%RuntimeConvertFrom.as.ImplicitAs.impl.Convert] -// CHECK:STDOUT: %bound_method: = bound_method constants.%from, %impl.elem0 [symbolic = constants.%RuntimeConvertFrom.as.ImplicitAs.impl.Convert.bound] +// CHECK:STDOUT: %bound_method.loc41_19.1: = bound_method constants.%from, %impl.elem0 [symbolic = constants.%RuntimeConvertFrom.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %.loc41_19.1: ref %RuntimeConvertTo = temporary_storage -// CHECK:STDOUT: %RuntimeConvertFrom.as.ImplicitAs.impl.Convert.call: init %RuntimeConvertTo = call %bound_method(constants.%from) to %.loc41_19.1 +// CHECK:STDOUT: %RuntimeConvertFrom.as.ImplicitAs.impl.Convert.call: init %RuntimeConvertTo = call %bound_method.loc41_19.1(constants.%from) to %.loc41_19.1 // CHECK:STDOUT: %.loc41_19.2: init %RuntimeConvertTo = converted constants.%from, %RuntimeConvertFrom.as.ImplicitAs.impl.Convert.call // CHECK:STDOUT: %.loc41_19.3: ref %RuntimeConvertTo = temporary %.loc41_19.1, %.loc41_19.2 // CHECK:STDOUT: %.loc41_19.4: %RuntimeConvertTo = bind_value %.loc41_19.3 // CHECK:STDOUT: %F.specific_fn: = specific_function %F.ref, @F(constants.%tuple, ) [concrete = ] // CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn(%holds_to.ref) -// CHECK:STDOUT: %RuntimeConvertTo.as.Destroy.impl.Op.bound: = bound_method %.loc41_19.3, constants.%RuntimeConvertTo.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc41: %type_where = facet_value constants.%RuntimeConvertTo, () [concrete = constants.%facet_value.d7d] +// CHECK:STDOUT: %.loc41_19.5: %type_where = converted constants.%RuntimeConvertTo, %facet_value.loc41 [concrete = constants.%facet_value.d7d] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc41: = bound_method %.loc41_19.3, constants.%AggregateT.as_type.as.Destroy.impl.Op.c9f +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.c9f, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d7d) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e71] +// CHECK:STDOUT: %bound_method.loc41_19.2: = bound_method %.loc41_19.3, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc41: %ptr.339 = addr_of %.loc41_19.3 -// CHECK:STDOUT: %RuntimeConvertTo.as.Destroy.impl.Op.call: init %empty_tuple.type = call %RuntimeConvertTo.as.Destroy.impl.Op.bound(%addr.loc41) -// CHECK:STDOUT: %RuntimeConvertFrom.as.Destroy.impl.Op.bound: = bound_method %.loc30_36.4, constants.%RuntimeConvertFrom.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc41: init %empty_tuple.type = call %bound_method.loc41_19.2(%addr.loc41) +// CHECK:STDOUT: %facet_value.loc30: %type_where = facet_value constants.%RuntimeConvertFrom, () [concrete = constants.%facet_value.631] +// CHECK:STDOUT: %.loc30_36.5: %type_where = converted constants.%RuntimeConvertFrom, %facet_value.loc30 [concrete = constants.%facet_value.631] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc30: = bound_method %.loc30_36.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.58a +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.58a, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.631) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.b86] +// CHECK:STDOUT: %bound_method.loc30: = bound_method %.loc30_36.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc30: %ptr.415 = addr_of %.loc30_36.4 -// CHECK:STDOUT: %RuntimeConvertFrom.as.Destroy.impl.Op.call: init %empty_tuple.type = call %RuntimeConvertFrom.as.Destroy.impl.Op.bound(%addr.loc30) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %bound_method.loc30(%addr.loc30) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -398,19 +313,6 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.cc9 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.cc4 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @HoldsType.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %HoldsType => constants.%HoldsType.cc9 -// CHECK:STDOUT: %ptr => constants.%ptr.47e -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c39 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T, constants.%A) { // CHECK:STDOUT: %T.loc27_6.1 => constants.%T // CHECK:STDOUT: %tuple.elem0.loc27_25.1 => constants.%tuple.elem0 diff --git a/toolchain/check/testdata/for/actual.carbon b/toolchain/check/testdata/for/actual.carbon index 667cc4551858..44cd86d40e3a 100644 --- a/toolchain/check/testdata/for/actual.carbon +++ b/toolchain/check/testdata/for/actual.carbon @@ -105,14 +105,6 @@ fn Read() { // 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: %IntRange.elem.e7c: type = unbound_element_type %IntRange.349, %Int.49d0e6.1 [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.231: = impl_witness @IntRange.%Destroy.impl_witness_table, @IntRange.as.Destroy.impl(%N) [symbolic] -// CHECK:STDOUT: %ptr.710: type = ptr_type %IntRange.349 [symbolic] -// CHECK:STDOUT: %pattern_type.99f: type = pattern_type %ptr.710 [symbolic] -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.type: type = fn_type @IntRange.as.Destroy.impl.Op, @IntRange.as.Destroy.impl(%N) [symbolic] -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op: %IntRange.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.start.end.78d: type = struct_type {.start: %Int.49d0e6.1, .end: %Int.49d0e6.1} [symbolic] // CHECK:STDOUT: %complete_type.9d5: = complete_type_witness %struct_type.start.end.78d [symbolic] // CHECK:STDOUT: %require_complete.524: = require_complete_type %IntRange.349 [symbolic] @@ -156,12 +148,15 @@ fn Read() { // CHECK:STDOUT: %impl.elem0.bca: %.941 = impl_witness_access %Inc.lookup_impl_witness, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.989: = specific_impl_function %impl.elem0.bca, @Inc.Op(%Inc.facet) [symbolic] // CHECK:STDOUT: %Optional.Some.specific_fn: = specific_function %Optional.Some.dff, @Optional.Some(%Copy.facet.cd7) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.44e: = impl_witness imports.%Destroy.impl_witness_table.ad0, @Int.as.Destroy.impl(%N) [symbolic] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%N) [symbolic] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op: %Int.as.Destroy.impl.Op.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.facet.17e: %Destroy.type = facet_value %Int.49d0e6.1, (%Destroy.impl_witness.44e) [symbolic] -// CHECK:STDOUT: %.819: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.17e [symbolic] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op, @Int.as.Destroy.impl.Op(%N) [symbolic] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Int.49d0e6.1, () [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.34a: = lookup_impl_witness %Int.49d0e6.1, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Int.49d0e6.1, (%Destroy.lookup_impl_witness.34a) [symbolic] +// CHECK:STDOUT: %.358: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet [symbolic] +// CHECK:STDOUT: %impl.elem0.999: %.358 = impl_witness_access %Destroy.lookup_impl_witness.34a, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.5f7: = specific_impl_function %impl.elem0.999, @Destroy.Op(%Destroy.facet) [symbolic] // CHECK:STDOUT: %Optional.None.specific_fn: = specific_function %Optional.None.016, @Optional.None(%Copy.facet.cd7) [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] @@ -207,10 +202,10 @@ fn Read() { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Iterate = %Core.Iterate // CHECK:STDOUT: .Optional = %Core.Optional -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .OrderedWith = %Core.OrderedWith // CHECK:STDOUT: .Inc = %Core.Inc +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -229,7 +224,6 @@ fn Read() { // CHECK:STDOUT: %Core.import_ref.725b: @Optional.%Optional.None.type (%Optional.None.type.3df) = import_ref Core//prelude/iterate, inst145 [indirect], loaded [symbolic = @Optional.%Optional.None (constants.%Optional.None.321)] // CHECK:STDOUT: %Core.import_ref.9103: @Optional.%Optional.Some.type (%Optional.Some.type.48a) = import_ref Core//prelude/iterate, inst146 [indirect], loaded [symbolic = @Optional.%Optional.Some (constants.%Optional.Some.a29)] // CHECK:STDOUT: %Core.Optional: %Optional.type = import_ref Core//prelude/types/optional, Optional, loaded [concrete = constants.%Optional.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.OrderedWith: %OrderedWith.type.270 = import_ref Core//prelude/operators/comparison, OrderedWith, loaded [concrete = constants.%OrderedWith.generic] // CHECK:STDOUT: %Core.import_ref.1cc: @OrderedWith.%OrderedWith.assoc_type (%OrderedWith.assoc_type.03c) = import_ref Core//prelude/operators/comparison, loc26_44, loaded [symbolic = @OrderedWith.%assoc0 (constants.%assoc0.3c6)] @@ -241,8 +235,7 @@ fn Read() { // CHECK:STDOUT: %Core.import_ref.a77 = import_ref Core//prelude/types/int, loc62_61, unloaded // CHECK:STDOUT: %OrderedWith.impl_witness_table.95f = impl_witness_table (%Core.import_ref.ab6, %Core.import_ref.54d, %Core.import_ref.e00, %Core.import_ref.a77), @Int.as.OrderedWith.impl.aed [concrete] // CHECK:STDOUT: %Core.Inc: type = import_ref Core//prelude/operators/arithmetic, Inc, loaded [concrete = constants.%Inc.type] -// CHECK:STDOUT: %Core.import_ref.183: @Int.as.Destroy.impl.%Int.as.Destroy.impl.Op.type (%Int.as.Destroy.impl.Op.type) = import_ref Core//prelude/types/int, loc14_29, loaded [symbolic = @Int.as.Destroy.impl.%Int.as.Destroy.impl.Op (constants.%Int.as.Destroy.impl.Op)] -// CHECK:STDOUT: %Destroy.impl_witness_table.ad0 = impl_witness_table (%Core.import_ref.183), @Int.as.Destroy.impl [concrete] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/operators/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/types/int, loc27_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -368,35 +361,6 @@ fn Read() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @IntRange.as.Destroy.impl(@IntRange.%N.loc4_16.2: Core.IntLiteral) { -// CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.349)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @IntRange.%Destroy.impl_witness_table, @IntRange.as.Destroy.impl(%N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.231)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.type: type = fn_type @IntRange.as.Destroy.impl.Op, @IntRange.as.Destroy.impl(%N) [symbolic = %IntRange.as.Destroy.impl.Op.type (constants.%IntRange.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op: @IntRange.as.Destroy.impl.%IntRange.as.Destroy.impl.Op.type (%IntRange.as.Destroy.impl.Op.type) = struct_value () [symbolic = %IntRange.as.Destroy.impl.Op (constants.%IntRange.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @IntRange.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.decl: @IntRange.as.Destroy.impl.%IntRange.as.Destroy.impl.Op.type (%IntRange.as.Destroy.impl.Op.type) = fn_decl @IntRange.as.Destroy.impl.Op [symbolic = @IntRange.as.Destroy.impl.%IntRange.as.Destroy.impl.Op (constants.%IntRange.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @IntRange.as.Destroy.impl.Op.%pattern_type (%pattern_type.99f) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @IntRange.as.Destroy.impl.Op.%pattern_type (%pattern_type.99f) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_39.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @IntRange.as.Destroy.impl.Op.%ptr (%ptr.710) = value_param call_param0 -// CHECK:STDOUT: %.loc4_39.2: type = splice_block %Self.ref [symbolic = %IntRange (constants.%IntRange.349)] { -// CHECK:STDOUT: %.loc4_39.3: type = specific_constant constants.%IntRange.349, @IntRange(constants.%N) [symbolic = %IntRange (constants.%IntRange.349)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_39.3 [symbolic = %IntRange (constants.%IntRange.349)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @IntRange.as.Destroy.impl.Op.%ptr (%ptr.710) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %IntRange.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @IntRange.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @IntRange(%N.loc4_16.2: Core.IntLiteral) { // CHECK:STDOUT: %N.loc4_16.1: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc4_16.1 (constants.%N)] // CHECK:STDOUT: @@ -485,10 +449,6 @@ fn Read() { // CHECK:STDOUT: %N.ref.loc23: Core.IntLiteral = name_ref N, %N.loc4_16.2 [symbolic = %N.loc4_16.1 (constants.%N)] // CHECK:STDOUT: %Int.loc23: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc22_32.2 (constants.%Int.49d0e6.1)] // CHECK:STDOUT: %.loc23: @IntRange.%IntRange.elem (%IntRange.elem.e7c) = field_decl end, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%IntRange.349 [symbolic = @IntRange.as.Destroy.impl.%IntRange (constants.%IntRange.349)] -// CHECK:STDOUT: impl_decl @IntRange.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@IntRange.as.Destroy.impl.%IntRange.as.Destroy.impl.Op.decl), @IntRange.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @IntRange.as.Destroy.impl(constants.%N) [symbolic = @IntRange.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.231)] // CHECK:STDOUT: %complete_type.loc24_1.1: = complete_type_witness constants.%struct_type.start.end.78d [symbolic = %complete_type.loc24_1.2 (constants.%complete_type.9d5)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc24_1.1 // CHECK:STDOUT: @@ -616,12 +576,12 @@ fn Read() { // CHECK:STDOUT: %Optional.Some.type: type = fn_type @Optional.Some, @Optional(%Copy.facet.loc11_75.1) [symbolic = %Optional.Some.type (constants.%Optional.Some.type.20f)] // CHECK:STDOUT: %Optional.Some: @IntRange.as.Iterate.impl.Next.%Optional.Some.type (%Optional.Some.type.20f) = struct_value () [symbolic = %Optional.Some (constants.%Optional.Some.dff)] // CHECK:STDOUT: %Optional.Some.specific_fn.loc15_42.2: = specific_function %Optional.Some, @Optional.Some(%Copy.facet.loc11_75.1) [symbolic = %Optional.Some.specific_fn.loc15_42.2 (constants.%Optional.Some.specific_fn)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.ad0, @Int.as.Destroy.impl(%N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.44e)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Int.loc11_43.1, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.17e)] -// CHECK:STDOUT: %.loc12_7: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc12_7 (constants.%.819)] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%N) [symbolic = %Int.as.Destroy.impl.Op.type (constants.%Int.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op: @IntRange.as.Iterate.impl.Next.%Int.as.Destroy.impl.Op.type (%Int.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Int.as.Destroy.impl.Op (constants.%Int.as.Destroy.impl.Op)] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op, @Int.as.Destroy.impl.Op(%N) [symbolic = %Int.as.Destroy.impl.Op.specific_fn (constants.%Int.as.Destroy.impl.Op.specific_fn)] +// CHECK:STDOUT: %facet_value.loc12_7.3: %type_where = facet_value %Int.loc11_43.1, () [symbolic = %facet_value.loc12_7.3 (constants.%facet_value)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Int.loc11_43.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.34a)] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Int.loc11_43.1, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)] +// CHECK:STDOUT: %.loc12_7.5: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc12_7.5 (constants.%.358)] +// CHECK:STDOUT: %impl.elem0.loc12_7.3: @IntRange.as.Iterate.impl.Next.%.loc12_7.5 (%.358) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.999)] +// CHECK:STDOUT: %specific_impl_fn.loc12_7.3: = specific_impl_function %impl.elem0.loc12_7.3, @Destroy.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc12_7.3 (constants.%specific_impl_fn.5f7)] // CHECK:STDOUT: %Optional.None.type: type = fn_type @Optional.None, @Optional(%Copy.facet.loc11_75.1) [symbolic = %Optional.None.type (constants.%Optional.None.type.66e)] // CHECK:STDOUT: %Optional.None: @IntRange.as.Iterate.impl.Next.%Optional.None.type (%Optional.None.type.66e) = struct_value () [symbolic = %Optional.None (constants.%Optional.None.016)] // CHECK:STDOUT: %Optional.None.specific_fn.loc17_42.2: = specific_function %Optional.None, @Optional.None(%Copy.facet.loc11_75.1) [symbolic = %Optional.None.specific_fn.loc17_42.2 (constants.%Optional.None.specific_fn)] @@ -659,8 +619,8 @@ fn Read() { // CHECK:STDOUT: %Less.ref: @IntRange.as.Iterate.impl.Next.%OrderedWith.assoc_type (%OrderedWith.assoc_type.d92) = name_ref Less, %.loc13_17.1 [symbolic = %assoc0 (constants.%assoc0.2ae)] // CHECK:STDOUT: %impl.elem0.loc13: @IntRange.as.Iterate.impl.Next.%.loc13_17.2 (%.050) = impl_witness_access constants.%OrderedWith.impl_witness.cef, element0 [symbolic = %Int.as.OrderedWith.impl.Less (constants.%Int.as.OrderedWith.impl.Less.9bd)] // CHECK:STDOUT: %bound_method.loc13_17.1: = bound_method %value.ref.loc13, %impl.elem0.loc13 -// CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13, @Int.as.OrderedWith.impl.Less.1(constants.%N, constants.%N) [symbolic = %Int.as.OrderedWith.impl.Less.specific_fn (constants.%Int.as.OrderedWith.impl.Less.specific_fn.331)] -// CHECK:STDOUT: %bound_method.loc13_17.2: = bound_method %value.ref.loc13, %specific_fn.loc13 +// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0.loc13, @Int.as.OrderedWith.impl.Less.1(constants.%N, constants.%N) [symbolic = %Int.as.OrderedWith.impl.Less.specific_fn (constants.%Int.as.OrderedWith.impl.Less.specific_fn.331)] +// CHECK:STDOUT: %bound_method.loc13_17.2: = bound_method %value.ref.loc13, %specific_fn // CHECK:STDOUT: %.loc13_11: @IntRange.as.Iterate.impl.Next.%Int.loc11_43.1 (%Int.49d0e6.1) = bind_value %value.ref.loc13 // CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.call: init bool = call %bound_method.loc13_17.2(%.loc13_11, %.loc13_23.2) // CHECK:STDOUT: %.loc13_27.1: bool = value_of_initializer %Int.as.OrderedWith.impl.Less.call @@ -696,12 +656,14 @@ fn Read() { // CHECK:STDOUT: %.loc11_47.1: ref @IntRange.as.Iterate.impl.Next.%Optional.loc11_75.1 (%Optional.671) = splice_block %return {} // CHECK:STDOUT: %.loc15_48: @IntRange.as.Iterate.impl.Next.%Int.loc11_43.1 (%Int.49d0e6.1) = bind_value %value.ref.loc15 // CHECK:STDOUT: %Optional.Some.call: init @IntRange.as.Iterate.impl.Next.%Optional.loc11_75.1 (%Optional.671) = call %Optional.Some.specific_fn.loc15_42.1(%.loc15_48) to %.loc11_47.1 -// CHECK:STDOUT: %impl.elem0.loc12_7.1: @IntRange.as.Iterate.impl.Next.%.loc12_7 (%.819) = impl_witness_access constants.%Destroy.impl_witness.44e, element0 [symbolic = %Int.as.Destroy.impl.Op (constants.%Int.as.Destroy.impl.Op)] +// CHECK:STDOUT: %facet_value.loc12_7.1: %type_where = facet_value constants.%Int.49d0e6.1, () [symbolic = %facet_value.loc12_7.3 (constants.%facet_value)] +// CHECK:STDOUT: %.loc12_7.1: %type_where = converted constants.%Int.49d0e6.1, %facet_value.loc12_7.1 [symbolic = %facet_value.loc12_7.3 (constants.%facet_value)] +// CHECK:STDOUT: %impl.elem0.loc12_7.1: @IntRange.as.Iterate.impl.Next.%.loc12_7.5 (%.358) = impl_witness_access constants.%Destroy.lookup_impl_witness.34a, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.999)] // CHECK:STDOUT: %bound_method.loc12_7.1: = bound_method %value.var, %impl.elem0.loc12_7.1 -// CHECK:STDOUT: %specific_fn.loc12_7.1: = specific_function %impl.elem0.loc12_7.1, @Int.as.Destroy.impl.Op(constants.%N) [symbolic = %Int.as.Destroy.impl.Op.specific_fn (constants.%Int.as.Destroy.impl.Op.specific_fn)] -// CHECK:STDOUT: %bound_method.loc12_7.2: = bound_method %value.var, %specific_fn.loc12_7.1 +// CHECK:STDOUT: %specific_impl_fn.loc12_7.1: = specific_impl_function %impl.elem0.loc12_7.1, @Destroy.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc12_7.3 (constants.%specific_impl_fn.5f7)] +// CHECK:STDOUT: %bound_method.loc12_7.2: = bound_method %value.var, %specific_impl_fn.loc12_7.1 // CHECK:STDOUT: %addr.loc12_7.1: @IntRange.as.Iterate.impl.Next.%ptr.loc11_44.1 (%ptr.784) = addr_of %value.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc12_7.1: init %empty_tuple.type = call %bound_method.loc12_7.2(%addr.loc12_7.1) +// CHECK:STDOUT: %.loc12_7.2: init %empty_tuple.type = call %bound_method.loc12_7.2(%addr.loc12_7.1) // CHECK:STDOUT: return %Optional.Some.call to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else: @@ -719,27 +681,18 @@ fn Read() { // CHECK:STDOUT: %Optional.None.specific_fn.loc17_42.1: = specific_function %None.ref, @Optional.None(constants.%Copy.facet.cd7) [symbolic = %Optional.None.specific_fn.loc17_42.2 (constants.%Optional.None.specific_fn)] // CHECK:STDOUT: %.loc11_47.2: ref @IntRange.as.Iterate.impl.Next.%Optional.loc11_75.1 (%Optional.671) = splice_block %return {} // CHECK:STDOUT: %Optional.None.call: init @IntRange.as.Iterate.impl.Next.%Optional.loc11_75.1 (%Optional.671) = call %Optional.None.specific_fn.loc17_42.1() to %.loc11_47.2 -// CHECK:STDOUT: %impl.elem0.loc12_7.2: @IntRange.as.Iterate.impl.Next.%.loc12_7 (%.819) = impl_witness_access constants.%Destroy.impl_witness.44e, element0 [symbolic = %Int.as.Destroy.impl.Op (constants.%Int.as.Destroy.impl.Op)] +// CHECK:STDOUT: %facet_value.loc12_7.2: %type_where = facet_value constants.%Int.49d0e6.1, () [symbolic = %facet_value.loc12_7.3 (constants.%facet_value)] +// CHECK:STDOUT: %.loc12_7.3: %type_where = converted constants.%Int.49d0e6.1, %facet_value.loc12_7.2 [symbolic = %facet_value.loc12_7.3 (constants.%facet_value)] +// CHECK:STDOUT: %impl.elem0.loc12_7.2: @IntRange.as.Iterate.impl.Next.%.loc12_7.5 (%.358) = impl_witness_access constants.%Destroy.lookup_impl_witness.34a, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.999)] // CHECK:STDOUT: %bound_method.loc12_7.3: = bound_method %value.var, %impl.elem0.loc12_7.2 -// CHECK:STDOUT: %specific_fn.loc12_7.2: = specific_function %impl.elem0.loc12_7.2, @Int.as.Destroy.impl.Op(constants.%N) [symbolic = %Int.as.Destroy.impl.Op.specific_fn (constants.%Int.as.Destroy.impl.Op.specific_fn)] -// CHECK:STDOUT: %bound_method.loc12_7.4: = bound_method %value.var, %specific_fn.loc12_7.2 +// CHECK:STDOUT: %specific_impl_fn.loc12_7.2: = specific_impl_function %impl.elem0.loc12_7.2, @Destroy.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc12_7.3 (constants.%specific_impl_fn.5f7)] +// CHECK:STDOUT: %bound_method.loc12_7.4: = bound_method %value.var, %specific_impl_fn.loc12_7.2 // CHECK:STDOUT: %addr.loc12_7.2: @IntRange.as.Iterate.impl.Next.%ptr.loc11_44.1 (%ptr.784) = addr_of %value.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc12_7.2: init %empty_tuple.type = call %bound_method.loc12_7.4(%addr.loc12_7.2) +// CHECK:STDOUT: %.loc12_7.4: init %empty_tuple.type = call %bound_method.loc12_7.4(%addr.loc12_7.2) // CHECK:STDOUT: return %Optional.None.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @IntRange.as.Destroy.impl.Op(@IntRange.%N.loc4_16.2: Core.IntLiteral) { -// CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.349)] -// CHECK:STDOUT: %ptr: type = ptr_type %IntRange [symbolic = %ptr (constants.%ptr.710)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.99f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @IntRange.as.Destroy.impl.Op.%ptr (%ptr.710)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @Range(%end.param: %i32) -> %return.param: %IntRange.365 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %IntRange.ref.loc27: %IntRange.type = name_ref IntRange, file.%IntRange.decl [concrete = constants.%IntRange.generic] @@ -822,19 +775,6 @@ fn Read() { // CHECK:STDOUT: %pattern_type.loc11_47 => constants.%pattern_type.ff2 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.as.Destroy.impl(constants.%N) { -// CHECK:STDOUT: %N => constants.%N -// CHECK:STDOUT: %IntRange => constants.%IntRange.349 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.231 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.as.Destroy.impl.Op(constants.%N) { -// CHECK:STDOUT: %N => constants.%N -// CHECK:STDOUT: %IntRange => constants.%IntRange.349 -// CHECK:STDOUT: %ptr => constants.%ptr.710 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.99f -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @IntRange(constants.%int_32) { // CHECK:STDOUT: %N.loc4_16.1 => constants.%int_32 // CHECK:STDOUT: @@ -931,17 +871,12 @@ fn Read() { // CHECK:STDOUT: %bound_method: = bound_method %y, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method(%y) [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.224: = impl_witness imports.%Destroy.impl_witness_table.b26, @IntRange.as.Destroy.impl(%N) [symbolic] -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.type.c84: type = fn_type @IntRange.as.Destroy.impl.Op, @IntRange.as.Destroy.impl(%N) [symbolic] -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.1ba: %IntRange.as.Destroy.impl.Op.type.c84 = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.710: type = ptr_type %IntRange.349 [symbolic] -// CHECK:STDOUT: %pattern_type.99f: type = pattern_type %ptr.710 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.30e: = impl_witness imports.%Destroy.impl_witness_table.b26, @IntRange.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.type.e99: type = fn_type @IntRange.as.Destroy.impl.Op, @IntRange.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.ec2: %IntRange.as.Destroy.impl.Op.type.e99 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %IntRange.365, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.f39: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.0ed: %AggregateT.as_type.as.Destroy.impl.Op.type.f39 = struct_value () [concrete] // CHECK:STDOUT: %ptr.049: type = ptr_type %IntRange.365 [concrete] -// CHECK:STDOUT: %pattern_type.37a: type = pattern_type %ptr.049 [concrete] -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.specific_fn: = specific_function %IntRange.as.Destroy.impl.Op.ec2, @IntRange.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.0ed, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -966,13 +901,6 @@ fn Read() { // CHECK:STDOUT: %Core.import_ref.657: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.893) = import_ref Core//prelude/types/int, loc27_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.411)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.e48 = impl_witness_table (%Core.import_ref.657), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.c10: = import_ref Main//lib, loc4_39, loaded [symbolic = @IntRange.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.224)] -// CHECK:STDOUT: %Main.import_ref.f1e294.3: Core.IntLiteral = import_ref Main//lib, loc4_16, loaded [symbolic = @IntRange.%N (constants.%N)] -// CHECK:STDOUT: %Main.import_ref.dae: type = import_ref Main//lib, loc4_39, loaded [symbolic = @IntRange.as.Destroy.impl.%IntRange (constants.%IntRange.349)] -// CHECK:STDOUT: %Main.import_ref.e45: type = import_ref Main//lib, inst720 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.d62: @IntRange.as.Destroy.impl.%IntRange.as.Destroy.impl.Op.type (%IntRange.as.Destroy.impl.Op.type.c84) = import_ref Main//lib, loc4_39, loaded [symbolic = @IntRange.as.Destroy.impl.%IntRange.as.Destroy.impl.Op (constants.%IntRange.as.Destroy.impl.Op.1ba)] -// CHECK:STDOUT: %Destroy.impl_witness_table.b26 = impl_witness_table (%Main.import_ref.d62), @IntRange.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Main.import_ref.f1e294.4: Core.IntLiteral = import_ref Main//lib, loc4_16, loaded [symbolic = @IntRange.%N (constants.%N)] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -987,21 +915,6 @@ fn Read() { // CHECK:STDOUT: %Read.decl: %Read.type = fn_decl @Read [concrete = constants.%Read] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @IntRange.as.Destroy.impl(imports.%Main.import_ref.f1e294.3: Core.IntLiteral) [from "lib.carbon"] { -// CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.349)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.b26, @IntRange.as.Destroy.impl(%N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.224)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.type: type = fn_type @IntRange.as.Destroy.impl.Op, @IntRange.as.Destroy.impl(%N) [symbolic = %IntRange.as.Destroy.impl.Op.type (constants.%IntRange.as.Destroy.impl.Op.type.c84)] -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op: @IntRange.as.Destroy.impl.%IntRange.as.Destroy.impl.Op.type (%IntRange.as.Destroy.impl.Op.type.c84) = struct_value () [symbolic = %IntRange.as.Destroy.impl.Op (constants.%IntRange.as.Destroy.impl.Op.1ba)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%Main.import_ref.dae as imports.%Main.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.c10 -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @IntRange(imports.%Main.import_ref.f1e294.1: Core.IntLiteral) [from "lib.carbon"] { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] // CHECK:STDOUT: @@ -1048,7 +961,7 @@ fn Read() { // CHECK:STDOUT: %x.var: ref %IntRange.365 = var %x.var_patt // CHECK:STDOUT: %Range.ref: %Range.type = name_ref Range, imports.%Main.Range [concrete = constants.%Range] // CHECK:STDOUT: %y.ref: Core.IntLiteral = name_ref y, %y [symbolic = constants.%y] -// CHECK:STDOUT: %.loc6_3: ref %IntRange.365 = splice_block %x.var {} +// CHECK:STDOUT: %.loc6_3.1: ref %IntRange.365 = splice_block %x.var {} // CHECK:STDOUT: %impl.elem0: %.a22 = impl_witness_access constants.%ImplicitAs.impl_witness.a64, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.c3c] // CHECK:STDOUT: %bound_method.loc6_31.1: = bound_method %y.ref, %impl.elem0 [symbolic = 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] @@ -1056,7 +969,7 @@ fn Read() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc6_31.2(%y.ref) [symbolic = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.call] // CHECK:STDOUT: %.loc6_31.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [symbolic = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.call] // CHECK:STDOUT: %.loc6_31.2: %i32 = converted %y.ref, %.loc6_31.1 [symbolic = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.call] -// CHECK:STDOUT: %Range.call: init %IntRange.365 = call %Range.ref(%.loc6_31.2) to %.loc6_3 +// CHECK:STDOUT: %Range.call: init %IntRange.365 = call %Range.ref(%.loc6_31.2) to %.loc6_3.1 // CHECK:STDOUT: assign %x.var, %Range.call // CHECK:STDOUT: %.loc6_21: type = splice_block %IntRange [concrete = constants.%IntRange.365] { // CHECK:STDOUT: %IntRange.ref: %IntRange.type = name_ref IntRange, imports.%Main.IntRange [concrete = constants.%IntRange.generic] @@ -1064,11 +977,13 @@ fn Read() { // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(constants.%int_32) [concrete = constants.%IntRange.365] // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %IntRange.365 = bind_name x, %x.var -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.bound: = bound_method %x.var, constants.%IntRange.as.Destroy.impl.Op.ec2 -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.specific_fn: = specific_function constants.%IntRange.as.Destroy.impl.Op.ec2, @IntRange.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%IntRange.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc6_3: = bound_method %x.var, %IntRange.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%IntRange.365, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc6_3.2: %type_where = converted constants.%IntRange.365, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %x.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.0ed +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.0ed, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc6_3: = bound_method %x.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.049 = addr_of %x.var -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc6_3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc6_3(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1094,17 +1009,6 @@ fn Read() { // CHECK:STDOUT: // CHECK:STDOUT: fn @Range [from "lib.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @IntRange.as.Destroy.impl.Op(imports.%Main.import_ref.f1e294.4: Core.IntLiteral) [from "lib.carbon"] { -// CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.349)] -// CHECK:STDOUT: %ptr: type = ptr_type %IntRange [symbolic = %ptr (constants.%ptr.710)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.99f)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @IntRange(constants.%N) { // CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: @@ -1141,33 +1045,3 @@ fn Read() { // CHECK:STDOUT: %complete_type => constants.%complete_type.a43 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.as.Destroy.impl(constants.%N) { -// CHECK:STDOUT: %N => constants.%N -// CHECK:STDOUT: %IntRange => constants.%IntRange.349 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.224 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.as.Destroy.impl.Op(constants.%N) { -// CHECK:STDOUT: %N => constants.%N -// CHECK:STDOUT: %IntRange => constants.%IntRange.349 -// CHECK:STDOUT: %ptr => constants.%ptr.710 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.99f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.as.Destroy.impl(constants.%int_32) { -// CHECK:STDOUT: %N => constants.%int_32 -// CHECK:STDOUT: %IntRange => constants.%IntRange.365 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.30e -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op.type => constants.%IntRange.as.Destroy.impl.Op.type.e99 -// CHECK:STDOUT: %IntRange.as.Destroy.impl.Op => constants.%IntRange.as.Destroy.impl.Op.ec2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.as.Destroy.impl.Op(constants.%int_32) { -// CHECK:STDOUT: %N => constants.%int_32 -// CHECK:STDOUT: %IntRange => constants.%IntRange.365 -// CHECK:STDOUT: %ptr => constants.%ptr.049 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.37a -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/for/basic.carbon b/toolchain/check/testdata/for/basic.carbon index 4d41d9dd41f3..e0c9163204c1 100644 --- a/toolchain/check/testdata/for/basic.carbon +++ b/toolchain/check/testdata/for/basic.carbon @@ -80,9 +80,6 @@ fn Run() { // CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %TrivialRange.as.Iterate.impl.NewCursor.type.81eeda.2: type = fn_type @TrivialRange.as.Iterate.impl.NewCursor.loc6_32.2 [concrete] // CHECK:STDOUT: %TrivialRange.as.Iterate.impl.NewCursor.d4796b.2: %TrivialRange.as.Iterate.impl.NewCursor.type.81eeda.2 = struct_value () [concrete] -// CHECK:STDOUT: %ptr.41d: type = ptr_type %TrivialRange [concrete] -// CHECK:STDOUT: %TrivialRange.as.Destroy.impl.Op.type: type = fn_type @TrivialRange.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %TrivialRange.as.Destroy.impl.Op: %TrivialRange.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %Optional.HasValue.type.cac: type = fn_type @Optional.HasValue, @Optional(%Copy.facet) [concrete] // CHECK:STDOUT: %Optional.HasValue.5e3: %Optional.HasValue.type.cac = struct_value () [concrete] @@ -99,12 +96,17 @@ fn Run() { // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Optional.Get.1d7, @Optional.Get(%Copy.facet) [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] -// CHECK:STDOUT: %facet_value: %type_where = facet_value %empty_tuple.type, () [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.4e0: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %facet_value.ff9: %type_where = facet_value %empty_tuple.type, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.4e0: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.ff9) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.c00: %AggregateT.as_type.as.Destroy.impl.Op.type.4e0 = struct_value () [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.type.6cb: type = fn_type @Optional.as.Destroy.impl.Op, @Optional.as.Destroy.impl(%Copy.facet) [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.30f: %Optional.as.Destroy.impl.Op.type.6cb = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.136: %type_where = facet_value %Optional.68c, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.9ac: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.136) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b5c: %AggregateT.as_type.as.Destroy.impl.Op.type.9ac = struct_value () [concrete] // CHECK:STDOUT: %ptr.17e: type = ptr_type %Optional.68c [concrete] +// CHECK:STDOUT: %facet_value.441: %type_where = facet_value %TrivialRange, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d73: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.441) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.9e0: %AggregateT.as_type.as.Destroy.impl.Op.type.d73 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.41d: type = ptr_type %TrivialRange [concrete] // CHECK:STDOUT: %empty_tuple.type.as.Copy.impl.Op.type: type = fn_type @empty_tuple.type.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %empty_tuple.type.as.Copy.impl.Op: %empty_tuple.type.as.Copy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -180,28 +182,34 @@ fn Run() { // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %AfterLoop.ref: %AfterLoop.type = name_ref AfterLoop, file.%AfterLoop.decl [concrete = constants.%AfterLoop] // CHECK:STDOUT: %AfterLoop.call: init %empty_tuple.type = call %AfterLoop.ref() -// CHECK:STDOUT: %facet_value.loc18_35.1: %type_where = facet_value constants.%empty_tuple.type, () [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc18_35.12: %type_where = converted constants.%empty_tuple.type, %facet_value.loc18_35.1 [concrete = constants.%facet_value] +// CHECK:STDOUT: %facet_value.loc18_35.1: %type_where = facet_value constants.%empty_tuple.type, () [concrete = constants.%facet_value.ff9] +// CHECK:STDOUT: %.loc18_35.12: %type_where = converted constants.%empty_tuple.type, %facet_value.loc18_35.1 [concrete = constants.%facet_value.ff9] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc18_35.1: = bound_method %.loc18_35.10, constants.%AggregateT.as_type.as.Destroy.impl.Op.c00 // CHECK:STDOUT: // CHECK:STDOUT: %bound_method.loc18_35.5: = bound_method %.loc18_35.10, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc18_35.2: %ptr.843 = addr_of %.loc18_35.10 // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc18_35.1: init %empty_tuple.type = call %bound_method.loc18_35.5(%addr.loc18_35.2) -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.bound: = bound_method %.loc18_35.2, constants.%Optional.as.Destroy.impl.Op.30f +// CHECK:STDOUT: %facet_value.loc18_35.2: %type_where = facet_value constants.%Optional.68c, () [concrete = constants.%facet_value.136] +// CHECK:STDOUT: %.loc18_35.13: %type_where = converted constants.%Optional.68c, %facet_value.loc18_35.2 [concrete = constants.%facet_value.136] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc18_35.2: = bound_method %.loc18_35.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.b5c // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc18_35.6: = bound_method %.loc18_35.2, %Optional.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc18_35.6: = bound_method %.loc18_35.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc18_35.3: %ptr.17e = addr_of %.loc18_35.2 -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc18_35.6(%addr.loc18_35.3) -// CHECK:STDOUT: %facet_value.loc18_35.2: %type_where = facet_value constants.%empty_tuple.type, () [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc18_35.13: %type_where = converted constants.%empty_tuple.type, %facet_value.loc18_35.2 [concrete = constants.%facet_value] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc18_35.2: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.c00 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc18_35.2: init %empty_tuple.type = call %bound_method.loc18_35.6(%addr.loc18_35.3) +// CHECK:STDOUT: %facet_value.loc18_35.3: %type_where = facet_value constants.%empty_tuple.type, () [concrete = constants.%facet_value.ff9] +// CHECK:STDOUT: %.loc18_35.14: %type_where = converted constants.%empty_tuple.type, %facet_value.loc18_35.3 [concrete = constants.%facet_value.ff9] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc18_35.3: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.c00 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc18_35.7: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %bound_method.loc18_35.7: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc18_35.4: %ptr.843 = addr_of %var -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc18_35.2: init %empty_tuple.type = call %bound_method.loc18_35.7(%addr.loc18_35.4) -// CHECK:STDOUT: %TrivialRange.as.Destroy.impl.Op.bound: = bound_method %.loc18_18.4, constants.%TrivialRange.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc18_35.3: init %empty_tuple.type = call %bound_method.loc18_35.7(%addr.loc18_35.4) +// CHECK:STDOUT: %facet_value.loc18_18: %type_where = facet_value constants.%TrivialRange, () [concrete = constants.%facet_value.441] +// CHECK:STDOUT: %.loc18_18.5: %type_where = converted constants.%TrivialRange, %facet_value.loc18_18 [concrete = constants.%facet_value.441] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc18_18: = bound_method %.loc18_18.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.9e0 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc18_18: = bound_method %.loc18_18.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4 // CHECK:STDOUT: %addr.loc18_18: %ptr.41d = addr_of %.loc18_18.4 -// CHECK:STDOUT: %TrivialRange.as.Destroy.impl.Op.call: init %empty_tuple.type = call %TrivialRange.as.Destroy.impl.Op.bound(%addr.loc18_18) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc18_18: init %empty_tuple.type = call %bound_method.loc18_18(%addr.loc18_18) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/for/pattern.carbon b/toolchain/check/testdata/for/pattern.carbon index 226c3c31e595..3d47d92b3503 100644 --- a/toolchain/check/testdata/for/pattern.carbon +++ b/toolchain/check/testdata/for/pattern.carbon @@ -168,17 +168,20 @@ fn Run() { // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %Optional.HasValue.ac0, @Optional.HasValue(%Copy.facet) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Optional.Get.71a, @Optional.Get(%Copy.facet) [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.type.524: type = fn_type @Optional.as.Destroy.impl.Op, @Optional.as.Destroy.impl(%Copy.facet) [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.28c: %Optional.as.Destroy.impl.Op.type.524 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.94b: %type_where = facet_value %Optional.47f, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bd1: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.94b) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.a7d: %AggregateT.as_type.as.Destroy.impl.Op.type.bd1 = struct_value () [concrete] // CHECK:STDOUT: %ptr.c56: type = ptr_type %Optional.47f [concrete] -// CHECK:STDOUT: %facet_value: %type_where = facet_value %empty_struct_type, () [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %facet_value.7c2: %type_where = facet_value %empty_struct_type, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.7c2) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bf3: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4 = struct_value () [concrete] -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.type.3bb: type = fn_type @EmptyRange.as.Destroy.impl.Op, @EmptyRange.as.Destroy.impl(%Copy.facet) [concrete] -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.2df: %EmptyRange.as.Destroy.impl.Op.type.3bb = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.b6d: %type_where = facet_value %EmptyRange.ab3, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.8c7: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.b6d) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.e27: %AggregateT.as_type.as.Destroy.impl.Op.type.8c7 = struct_value () [concrete] // CHECK:STDOUT: %ptr.43f: type = ptr_type %EmptyRange.ab3 [concrete] // CHECK:STDOUT: %C.as.Copy.impl.Op.type: type = fn_type @C.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %C.as.Copy.impl.Op: %C.as.Copy.impl.Op.type = struct_value () [concrete] @@ -265,26 +268,34 @@ fn Run() { // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc10_36.10, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc10_36.1: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc10_36.12: %type_where = converted constants.%C, %facet_value.loc10_36.1 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_36.1: = bound_method %.loc10_36.10, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc10_36.7: = bound_method %.loc10_36.10, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc10_36.2: %ptr.019 = addr_of %.loc10_36.10 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc10_36.2) -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.bound: = bound_method %.loc10_36.2, constants.%Optional.as.Destroy.impl.Op.28c +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_36.1: init %empty_tuple.type = call %bound_method.loc10_36.7(%addr.loc10_36.2) +// CHECK:STDOUT: %facet_value.loc10_36.2: %type_where = facet_value constants.%Optional.47f, () [concrete = constants.%facet_value.94b] +// CHECK:STDOUT: %.loc10_36.13: %type_where = converted constants.%Optional.47f, %facet_value.loc10_36.2 [concrete = constants.%facet_value.94b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_36.2: = bound_method %.loc10_36.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.a7d // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_36.7: = bound_method %.loc10_36.2, %Optional.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_36.8: = bound_method %.loc10_36.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc10_36.3: %ptr.c56 = addr_of %.loc10_36.2 -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_36.7(%addr.loc10_36.3) -// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%empty_struct_type, () [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc10_36.12: %type_where = converted constants.%empty_struct_type, %facet_value [concrete = constants.%facet_value] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bf3 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_36.2: init %empty_tuple.type = call %bound_method.loc10_36.8(%addr.loc10_36.3) +// CHECK:STDOUT: %facet_value.loc10_36.3: %type_where = facet_value constants.%empty_struct_type, () [concrete = constants.%facet_value.7c2] +// CHECK:STDOUT: %.loc10_36.14: %type_where = converted constants.%empty_struct_type, %facet_value.loc10_36.3 [concrete = constants.%facet_value.7c2] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_36.3: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bf3 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_36.8: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_36.9: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc10_36.4: %ptr.c28 = addr_of %var -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_36.8(%addr.loc10_36.4) -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.bound: = bound_method %.loc10_35.2, constants.%EmptyRange.as.Destroy.impl.Op.2df +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_36.3: init %empty_tuple.type = call %bound_method.loc10_36.9(%addr.loc10_36.4) +// CHECK:STDOUT: %facet_value.loc10_35: %type_where = facet_value constants.%EmptyRange.ab3, () [concrete = constants.%facet_value.b6d] +// CHECK:STDOUT: %.loc10_35.5: %type_where = converted constants.%EmptyRange.ab3, %facet_value.loc10_35 [concrete = constants.%facet_value.b6d] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_35: = bound_method %.loc10_35.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.e27 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_35: = bound_method %.loc10_35.2, %EmptyRange.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_35: = bound_method %.loc10_35.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4 // CHECK:STDOUT: %addr.loc10_35: %ptr.43f = addr_of %.loc10_35.2 -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_35(%addr.loc10_35) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_35: init %empty_tuple.type = call %bound_method.loc10_35(%addr.loc10_35) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -340,16 +351,19 @@ fn Run() { // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %Optional.HasValue.ac0, @Optional.HasValue(%Copy.facet) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Optional.Get.71a, @Optional.Get(%Copy.facet) [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.type.524: type = fn_type @Optional.as.Destroy.impl.Op, @Optional.as.Destroy.impl(%Copy.facet) [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.28c: %Optional.as.Destroy.impl.Op.type.524 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.94b: %type_where = facet_value %Optional.47f, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bd1: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.94b) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.a7d: %AggregateT.as_type.as.Destroy.impl.Op.type.bd1 = struct_value () [concrete] // CHECK:STDOUT: %ptr.c56: type = ptr_type %Optional.47f [concrete] -// CHECK:STDOUT: %facet_value: %type_where = facet_value %empty_struct_type, () [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %facet_value.7c2: %type_where = facet_value %empty_struct_type, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.7c2) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bf3: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4 = struct_value () [concrete] -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.type.3bb: type = fn_type @EmptyRange.as.Destroy.impl.Op, @EmptyRange.as.Destroy.impl(%Copy.facet) [concrete] -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.2df: %EmptyRange.as.Destroy.impl.Op.type.3bb = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.b6d: %type_where = facet_value %EmptyRange.ab3, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.8c7: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.b6d) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.e27: %AggregateT.as_type.as.Destroy.impl.Op.type.8c7 = struct_value () [concrete] // CHECK:STDOUT: %ptr.43f: type = ptr_type %EmptyRange.ab3 [concrete] // CHECK:STDOUT: %C.as.Copy.impl.Op.type: type = fn_type @C.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %C.as.Copy.impl.Op: %C.as.Copy.impl.Op.type = struct_value () [concrete] @@ -425,9 +439,9 @@ fn Run() { // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc10_40.2, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%Copy.facet) [concrete = constants.%Optional.Get.specific_fn] // CHECK:STDOUT: %bound_method.loc10_40.6: = bound_method %.loc10_40.2, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc10_8: ref %C = splice_block %c.var {} +// CHECK:STDOUT: %.loc10_8.1: ref %C = splice_block %c.var {} // CHECK:STDOUT: %.loc10_40.8: %Optional.47f = bind_value %.loc10_40.2 -// CHECK:STDOUT: %Optional.Get.call: init %C = call %bound_method.loc10_40.6(%.loc10_40.8) to %.loc10_8 +// CHECK:STDOUT: %Optional.Get.call: init %C = call %bound_method.loc10_40.6(%.loc10_40.8) to %.loc10_8.1 // CHECK:STDOUT: assign %c.var, %Optional.Get.call // CHECK:STDOUT: %C.ref.loc10_15: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var @@ -438,26 +452,34 @@ fn Run() { // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc10_8: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc10_8.2: %type_where = converted constants.%C, %facet_value.loc10_8 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_8: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc10_8: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc10_8: %ptr.019 = addr_of %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc10_8) -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.bound: = bound_method %.loc10_40.2, constants.%Optional.as.Destroy.impl.Op.28c +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_8: init %empty_tuple.type = call %bound_method.loc10_8(%addr.loc10_8) +// CHECK:STDOUT: %facet_value.loc10_40.1: %type_where = facet_value constants.%Optional.47f, () [concrete = constants.%facet_value.94b] +// CHECK:STDOUT: %.loc10_40.9: %type_where = converted constants.%Optional.47f, %facet_value.loc10_40.1 [concrete = constants.%facet_value.94b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_40.1: = bound_method %.loc10_40.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.a7d // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_40.7: = bound_method %.loc10_40.2, %Optional.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_40.7: = bound_method %.loc10_40.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc10_40.2: %ptr.c56 = addr_of %.loc10_40.2 -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_40.7(%addr.loc10_40.2) -// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%empty_struct_type, () [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc10_40.9: %type_where = converted constants.%empty_struct_type, %facet_value [concrete = constants.%facet_value] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bf3 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_40.1: init %empty_tuple.type = call %bound_method.loc10_40.7(%addr.loc10_40.2) +// CHECK:STDOUT: %facet_value.loc10_40.2: %type_where = facet_value constants.%empty_struct_type, () [concrete = constants.%facet_value.7c2] +// CHECK:STDOUT: %.loc10_40.10: %type_where = converted constants.%empty_struct_type, %facet_value.loc10_40.2 [concrete = constants.%facet_value.7c2] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_40.2: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bf3 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_40.8: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_40.8: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc10_40.3: %ptr.c28 = addr_of %var -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_40.8(%addr.loc10_40.3) -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.bound: = bound_method %.loc10_39.2, constants.%EmptyRange.as.Destroy.impl.Op.2df +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_40.2: init %empty_tuple.type = call %bound_method.loc10_40.8(%addr.loc10_40.3) +// CHECK:STDOUT: %facet_value.loc10_39: %type_where = facet_value constants.%EmptyRange.ab3, () [concrete = constants.%facet_value.b6d] +// CHECK:STDOUT: %.loc10_39.5: %type_where = converted constants.%EmptyRange.ab3, %facet_value.loc10_39 [concrete = constants.%facet_value.b6d] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_39: = bound_method %.loc10_39.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.e27 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_39: = bound_method %.loc10_39.2, %EmptyRange.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_39: = bound_method %.loc10_39.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4 // CHECK:STDOUT: %addr.loc10_39: %ptr.43f = addr_of %.loc10_39.2 -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_39(%addr.loc10_39) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_39: init %empty_tuple.type = call %bound_method.loc10_39(%addr.loc10_39) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -511,7 +533,7 @@ fn Run() { // CHECK:STDOUT: %.a03: type = fn_type_with_self_type %Iterate.NewCursor.type, %Iterate.facet [concrete] // CHECK:STDOUT: %EmptyRange.as.Iterate.impl.NewCursor.specific_fn: = specific_function %EmptyRange.as.Iterate.impl.NewCursor.c2f, @EmptyRange.as.Iterate.impl.NewCursor(%Copy.facet.bd7) [concrete] // CHECK:STDOUT: %Iterate.Next.type: type = fn_type @Iterate.Next [concrete] -// CHECK:STDOUT: %.d03: type = fn_type_with_self_type %Iterate.Next.type, %Iterate.facet [concrete] +// CHECK:STDOUT: %.d03c: type = fn_type_with_self_type %Iterate.Next.type, %Iterate.facet [concrete] // CHECK:STDOUT: %Optional.82d: type = class_type @Optional, @Optional(%Copy.facet.bd7) [concrete] // CHECK:STDOUT: %EmptyRange.as.Iterate.impl.Next.specific_fn: = specific_function %EmptyRange.as.Iterate.impl.Next.3cd, @EmptyRange.as.Iterate.impl.Next(%Copy.facet.bd7) [concrete] // CHECK:STDOUT: %Optional.HasValue.type.60f: type = fn_type @Optional.HasValue, @Optional(%Copy.facet.bd7) [concrete] @@ -525,14 +547,16 @@ fn Run() { // CHECK:STDOUT: %facet_value.d7c: %type_where = facet_value %tuple.type.784, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.fa2: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d7c) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b18: %AggregateT.as_type.as.Destroy.impl.Op.type.fa2 = struct_value () [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.type.807: type = fn_type @Optional.as.Destroy.impl.Op, @Optional.as.Destroy.impl(%Copy.facet.bd7) [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.f4f: %Optional.as.Destroy.impl.Op.type.807 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.33f: %type_where = facet_value %Optional.82d, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.1dd: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.33f) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.961: %AggregateT.as_type.as.Destroy.impl.Op.type.1dd = struct_value () [concrete] // CHECK:STDOUT: %ptr.e7c: type = ptr_type %Optional.82d [concrete] // CHECK:STDOUT: %facet_value.7c2: %type_where = facet_value %empty_struct_type, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.7c2) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bf3: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4 = struct_value () [concrete] -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.type.b3a: type = fn_type @EmptyRange.as.Destroy.impl.Op, @EmptyRange.as.Destroy.impl(%Copy.facet.bd7) [concrete] -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.a76: %EmptyRange.as.Destroy.impl.Op.type.b3a = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.83c: %type_where = facet_value %EmptyRange.9df, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.5b5: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.83c) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b0d: %AggregateT.as_type.as.Destroy.impl.Op.type.5b5 = struct_value () [concrete] // CHECK:STDOUT: %ptr.dd0: type = ptr_type %EmptyRange.9df [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] @@ -594,7 +618,7 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr.loc10_61.1: %ptr.c28 = addr_of %var -// CHECK:STDOUT: %impl.elem3: %.d03 = impl_witness_access constants.%Iterate.impl_witness.b98, element3 [concrete = constants.%EmptyRange.as.Iterate.impl.Next.3cd] +// CHECK:STDOUT: %impl.elem3: %.d03c = impl_witness_access constants.%Iterate.impl_witness.b98, element3 [concrete = constants.%EmptyRange.as.Iterate.impl.Next.3cd] // CHECK:STDOUT: %bound_method.loc10_61.3: = bound_method %.loc10_60.2, %impl.elem3 // CHECK:STDOUT: %specific_fn.loc10_61.2: = specific_function %impl.elem3, @EmptyRange.as.Iterate.impl.Next(constants.%Copy.facet.bd7) [concrete = constants.%EmptyRange.as.Iterate.impl.Next.specific_fn] // CHECK:STDOUT: %bound_method.loc10_61.4: = bound_method %.loc10_60.2, %specific_fn.loc10_61.2 @@ -653,23 +677,27 @@ fn Run() { // CHECK:STDOUT: %bound_method.loc10_61.7: = bound_method %.loc10_61.10, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc10_61.2: %ptr.b85 = addr_of %.loc10_61.10 // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_61.1: init %empty_tuple.type = call %bound_method.loc10_61.7(%addr.loc10_61.2) -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.bound: = bound_method %.loc10_61.2, constants.%Optional.as.Destroy.impl.Op.f4f +// CHECK:STDOUT: %facet_value.loc10_61.2: %type_where = facet_value constants.%Optional.82d, () [concrete = constants.%facet_value.33f] +// CHECK:STDOUT: %.loc10_61.14: %type_where = converted constants.%Optional.82d, %facet_value.loc10_61.2 [concrete = constants.%facet_value.33f] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_61.2: = bound_method %.loc10_61.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.961 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_61.8: = bound_method %.loc10_61.2, %Optional.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_61.8: = bound_method %.loc10_61.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc10_61.3: %ptr.e7c = addr_of %.loc10_61.2 -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_61.8(%addr.loc10_61.3) -// CHECK:STDOUT: %facet_value.loc10_61.2: %type_where = facet_value constants.%empty_struct_type, () [concrete = constants.%facet_value.7c2] -// CHECK:STDOUT: %.loc10_61.14: %type_where = converted constants.%empty_struct_type, %facet_value.loc10_61.2 [concrete = constants.%facet_value.7c2] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_61.2: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bf3 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_61.2: init %empty_tuple.type = call %bound_method.loc10_61.8(%addr.loc10_61.3) +// CHECK:STDOUT: %facet_value.loc10_61.3: %type_where = facet_value constants.%empty_struct_type, () [concrete = constants.%facet_value.7c2] +// CHECK:STDOUT: %.loc10_61.15: %type_where = converted constants.%empty_struct_type, %facet_value.loc10_61.3 [concrete = constants.%facet_value.7c2] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_61.3: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bf3 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_61.9: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %bound_method.loc10_61.9: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc10_61.4: %ptr.c28 = addr_of %var -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_61.2: init %empty_tuple.type = call %bound_method.loc10_61.9(%addr.loc10_61.4) -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.bound: = bound_method %.loc10_60.2, constants.%EmptyRange.as.Destroy.impl.Op.a76 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_61.3: init %empty_tuple.type = call %bound_method.loc10_61.9(%addr.loc10_61.4) +// CHECK:STDOUT: %facet_value.loc10_60: %type_where = facet_value constants.%EmptyRange.9df, () [concrete = constants.%facet_value.83c] +// CHECK:STDOUT: %.loc10_60.5: %type_where = converted constants.%EmptyRange.9df, %facet_value.loc10_60 [concrete = constants.%facet_value.83c] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_60: = bound_method %.loc10_60.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.b0d // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_60: = bound_method %.loc10_60.2, %EmptyRange.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_60: = bound_method %.loc10_60.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4 // CHECK:STDOUT: %addr.loc10_60: %ptr.dd0 = addr_of %.loc10_60.2 -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_60(%addr.loc10_60) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_60: init %empty_tuple.type = call %bound_method.loc10_60(%addr.loc10_60) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -736,14 +764,16 @@ fn Run() { // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.bf8: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.c79) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.40e: %AggregateT.as_type.as.Destroy.impl.Op.type.bf8 = struct_value () [concrete] // CHECK:STDOUT: %ptr.9f0: type = ptr_type %tuple.type.56b [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.type.3b8: type = fn_type @Optional.as.Destroy.impl.Op, @Optional.as.Destroy.impl(%Copy.facet.ee6) [concrete] -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.421: %Optional.as.Destroy.impl.Op.type.3b8 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.44a: %type_where = facet_value %Optional.696, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6ab: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.44a) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.e4f: %AggregateT.as_type.as.Destroy.impl.Op.type.6ab = struct_value () [concrete] // CHECK:STDOUT: %ptr.676: type = ptr_type %Optional.696 [concrete] // CHECK:STDOUT: %facet_value.7c2: %type_where = facet_value %empty_struct_type, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.7c2) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bf3: %AggregateT.as_type.as.Destroy.impl.Op.type.6a4 = struct_value () [concrete] -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.type.eaf: type = fn_type @EmptyRange.as.Destroy.impl.Op, @EmptyRange.as.Destroy.impl(%Copy.facet.ee6) [concrete] -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.2e1: %EmptyRange.as.Destroy.impl.Op.type.eaf = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.c8d: %type_where = facet_value %EmptyRange.f6a, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.ed8: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.c8d) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.000: %AggregateT.as_type.as.Destroy.impl.Op.type.ed8 = struct_value () [concrete] // CHECK:STDOUT: %ptr.1e6: type = ptr_type %EmptyRange.f6a [concrete] // CHECK:STDOUT: %C.as.Copy.impl.Op.type: type = fn_type @C.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %C.as.Copy.impl.Op: %C.as.Copy.impl.Op.type = struct_value () [concrete] @@ -853,23 +883,27 @@ fn Run() { // CHECK:STDOUT: %bound_method.loc10_49.7: = bound_method %.loc10_49.10, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc10_49.2: %ptr.9f0 = addr_of %.loc10_49.10 // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_49.1: init %empty_tuple.type = call %bound_method.loc10_49.7(%addr.loc10_49.2) -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.bound: = bound_method %.loc10_49.2, constants.%Optional.as.Destroy.impl.Op.421 +// CHECK:STDOUT: %facet_value.loc10_49.2: %type_where = facet_value constants.%Optional.696, () [concrete = constants.%facet_value.44a] +// CHECK:STDOUT: %.loc10_49.14: %type_where = converted constants.%Optional.696, %facet_value.loc10_49.2 [concrete = constants.%facet_value.44a] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_49.2: = bound_method %.loc10_49.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.e4f // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_49.8: = bound_method %.loc10_49.2, %Optional.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_49.8: = bound_method %.loc10_49.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc10_49.3: %ptr.676 = addr_of %.loc10_49.2 -// CHECK:STDOUT: %Optional.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_49.8(%addr.loc10_49.3) -// CHECK:STDOUT: %facet_value.loc10_49.2: %type_where = facet_value constants.%empty_struct_type, () [concrete = constants.%facet_value.7c2] -// CHECK:STDOUT: %.loc10_49.14: %type_where = converted constants.%empty_struct_type, %facet_value.loc10_49.2 [concrete = constants.%facet_value.7c2] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_49.2: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bf3 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_49.2: init %empty_tuple.type = call %bound_method.loc10_49.8(%addr.loc10_49.3) +// CHECK:STDOUT: %facet_value.loc10_49.3: %type_where = facet_value constants.%empty_struct_type, () [concrete = constants.%facet_value.7c2] +// CHECK:STDOUT: %.loc10_49.15: %type_where = converted constants.%empty_struct_type, %facet_value.loc10_49.3 [concrete = constants.%facet_value.7c2] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_49.3: = bound_method %var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bf3 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_49.9: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %bound_method.loc10_49.9: = bound_method %var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc10_49.4: %ptr.c28 = addr_of %var -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_49.2: init %empty_tuple.type = call %bound_method.loc10_49.9(%addr.loc10_49.4) -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.bound: = bound_method %.loc10_48.2, constants.%EmptyRange.as.Destroy.impl.Op.2e1 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_49.3: init %empty_tuple.type = call %bound_method.loc10_49.9(%addr.loc10_49.4) +// CHECK:STDOUT: %facet_value.loc10_48: %type_where = facet_value constants.%EmptyRange.f6a, () [concrete = constants.%facet_value.c8d] +// CHECK:STDOUT: %.loc10_48.5: %type_where = converted constants.%EmptyRange.f6a, %facet_value.loc10_48 [concrete = constants.%facet_value.c8d] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_48: = bound_method %.loc10_48.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.000 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc10_48: = bound_method %.loc10_48.2, %EmptyRange.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc10_48: = bound_method %.loc10_48.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4 // CHECK:STDOUT: %addr.loc10_48: %ptr.1e6 = addr_of %.loc10_48.2 -// CHECK:STDOUT: %EmptyRange.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_48(%addr.loc10_48) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_48: init %empty_tuple.type = call %bound_method.loc10_48(%addr.loc10_48) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: 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 9198eff2bcd9..b2c9510e82a7 100644 --- a/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon +++ b/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon @@ -61,10 +61,12 @@ fn Run() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -124,18 +126,20 @@ fn Run() { // 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] // CHECK:STDOUT: %Foo.call: init %f64.d77 = call %Foo.ref() -// CHECK:STDOUT: %.loc25_3: %i32 = converted %Foo.call, [concrete = ] +// CHECK:STDOUT: %.loc25_3.1: %i32 = converted %Foo.call, [concrete = ] // CHECK:STDOUT: assign %x.var, // CHECK:STDOUT: %.loc25_10: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %i32 = bind_name x, %x.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %x.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %x.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc25_3.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %x.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %x.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.235 = addr_of %x.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/call/i32.carbon b/toolchain/check/testdata/function/call/i32.carbon index 4043fc83636f..0b613c85ce9e 100644 --- a/toolchain/check/testdata/function/call/i32.carbon +++ b/toolchain/check/testdata/function/call/i32.carbon @@ -62,10 +62,12 @@ fn Main() { // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -148,11 +150,13 @@ fn Main() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc20_3: = bound_method %b.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc20_3: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc20_3: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.235 = addr_of %b.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc20_3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc20_3(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon b/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon index 77eaf1ce6161..6a4c81bdcad2 100644 --- a/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon +++ b/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon @@ -47,20 +47,8 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: %Inner.F: %Inner.F.type = struct_value () [symbolic] // CHECK:STDOUT: %Inner.G.type: type = fn_type @Inner.G, @Inner(%F) [symbolic] // CHECK:STDOUT: %Inner.G: %Inner.G.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7f2: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%F) [symbolic] -// CHECK:STDOUT: %ptr.2b5: type = ptr_type %Inner [symbolic] -// CHECK:STDOUT: %pattern_type.2df: type = pattern_type %ptr.2b5 [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%F) [symbolic] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: %Inner.as.Destroy.impl.Op.type = 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: %Destroy.impl_witness.8cc: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%F) [symbolic] -// CHECK:STDOUT: %ptr.955: type = ptr_type %Class [symbolic] -// CHECK:STDOUT: %pattern_type.9e0: type = pattern_type %ptr.955 [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%F) [symbolic] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: %Class.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] @@ -84,13 +72,11 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -121,64 +107,6 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Inner.as.Destroy.impl(@Class.%F.loc5_13.2: type) { -// CHECK:STDOUT: %F: type = bind_symbolic_name F, 0 [symbolic = %F (constants.%F)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%F) [symbolic = %Inner (constants.%Inner)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%F) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.7f2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.type: type = fn_type @Inner.as.Destroy.impl.Op, @Inner.as.Destroy.impl(%F) [symbolic = %Inner.as.Destroy.impl.Op.type (constants.%Inner.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Inner.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Inner.as.Destroy.impl.Op.decl: @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.type (%Inner.as.Destroy.impl.Op.type) = fn_decl @Inner.as.Destroy.impl.Op [symbolic = @Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op (constants.%Inner.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.2df) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Inner.as.Destroy.impl.Op.%pattern_type (%pattern_type.2df) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_15.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.2b5) = value_param call_param0 -// CHECK:STDOUT: %.loc6_15.2: type = splice_block %Self.ref [symbolic = %Inner (constants.%Inner)] { -// CHECK:STDOUT: %.loc6_15.3: type = specific_constant constants.%Inner, @Inner(constants.%F) [symbolic = %Inner (constants.%Inner)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_15.3 [symbolic = %Inner (constants.%Inner)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Inner.as.Destroy.impl.Op.%ptr (%ptr.2b5) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Inner.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Inner.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Class.as.Destroy.impl(@Class.%F.loc5_13.2: type) { -// CHECK:STDOUT: %F: type = bind_symbolic_name F, 0 [symbolic = %F (constants.%F)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%F) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Class.%Destroy.impl_witness_table, @Class.as.Destroy.impl(%F) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.8cc)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.type: type = fn_type @Class.as.Destroy.impl.Op, @Class.as.Destroy.impl(%F) [symbolic = %Class.as.Destroy.impl.Op.type (constants.%Class.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Class.as.Destroy.impl.Op: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Class.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Class.as.Destroy.impl.Op.decl: @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.type (%Class.as.Destroy.impl.Op.type) = fn_decl @Class.as.Destroy.impl.Op [symbolic = @Class.as.Destroy.impl.%Class.as.Destroy.impl.Op (constants.%Class.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Class.as.Destroy.impl.Op.%pattern_type (%pattern_type.9e0) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_23.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = value_param call_param0 -// CHECK:STDOUT: %.loc5_23.2: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { -// CHECK:STDOUT: %.loc5_23.3: type = specific_constant constants.%Class, @Class(constants.%F) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_23.3 [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Class.as.Destroy.impl.Op.%ptr (%ptr.955) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Class.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Class.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%F.loc5_13.2: type) { // CHECK:STDOUT: %F.loc5_13.1: type = bind_symbolic_name F, 0 [symbolic = %F.loc5_13.1 (constants.%F)] // CHECK:STDOUT: @@ -187,10 +115,6 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: type = class_decl @Inner [symbolic = @Class.%Inner (constants.%Inner)] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [symbolic = @Class.as.Destroy.impl.%Class (constants.%Class)] -// CHECK:STDOUT: impl_decl @Class.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Class.as.Destroy.impl.%Class.as.Destroy.impl.Op.decl), @Class.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Class.as.Destroy.impl(constants.%F) [symbolic = @Class.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.8cc)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -227,10 +151,6 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: %return.param.loc9: ref %i32 = out_param call_param0 // CHECK:STDOUT: %return.loc9: ref %i32 = return_slot %return.param.loc9 // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner [symbolic = @Inner.as.Destroy.impl.%Inner (constants.%Inner)] -// CHECK:STDOUT: impl_decl @Inner.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Inner.as.Destroy.impl.%Inner.as.Destroy.impl.Op.decl), @Inner.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Inner.as.Destroy.impl(constants.%F) [symbolic = @Inner.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.7f2)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -274,28 +194,6 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Inner.as.Destroy.impl.Op(@Class.%F.loc5_13.2: type) { -// CHECK:STDOUT: %F: type = bind_symbolic_name F, 0 [symbolic = %F (constants.%F)] -// CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%F) [symbolic = %Inner (constants.%Inner)] -// CHECK:STDOUT: %ptr: type = ptr_type %Inner [symbolic = %ptr (constants.%ptr.2b5)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.2df)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.2b5)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Class.as.Destroy.impl.Op(@Class.%F.loc5_13.2: type) { -// CHECK:STDOUT: %F: type = bind_symbolic_name F, 0 [symbolic = %F (constants.%F)] -// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%F) [symbolic = %Class (constants.%Class)] -// CHECK:STDOUT: %ptr: type = ptr_type %Class [symbolic = %ptr (constants.%ptr.955)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.9e0)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Class.as.Destroy.impl.Op.%ptr (%ptr.955)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%F) { // CHECK:STDOUT: %F.loc5_13.1 => constants.%F // CHECK:STDOUT: @@ -318,29 +216,3 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner.G(constants.%F) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl(constants.%F) { -// CHECK:STDOUT: %F => constants.%F -// CHECK:STDOUT: %Inner => constants.%Inner -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.7f2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl.Op(constants.%F) { -// CHECK:STDOUT: %F => constants.%F -// CHECK:STDOUT: %Inner => constants.%Inner -// CHECK:STDOUT: %ptr => constants.%ptr.2b5 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2df -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl(constants.%F) { -// CHECK:STDOUT: %F => constants.%F -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.8cc -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Class.as.Destroy.impl.Op(constants.%F) { -// CHECK:STDOUT: %F => constants.%F -// CHECK:STDOUT: %Class => constants.%Class -// CHECK:STDOUT: %ptr => constants.%ptr.955 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9e0 -// CHECK:STDOUT: } -// CHECK:STDOUT: 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 f22289b77d09..386c59acefbb 100644 --- a/toolchain/check/testdata/function/declaration/fail_import_incomplete_return.carbon +++ b/toolchain/check/testdata/function/declaration/fail_import_incomplete_return.carbon @@ -105,24 +105,15 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %ReturnDUsed: %ReturnDUsed.type = struct_value () [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -175,29 +166,9 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %D.decl.loc37: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc37: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C; // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -222,8 +193,6 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_use_imported.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -236,16 +205,18 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %ReturnCUsed: %ReturnCUsed.type = struct_value () [concrete] // CHECK:STDOUT: %ReturnDUnused.type: type = fn_type @ReturnDUnused [concrete] // CHECK:STDOUT: %ReturnDUnused: %ReturnDUnused.type = struct_value () [concrete] -// CHECK:STDOUT: %D.b3dde2.1: type = class_type @D.1 [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] +// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ReturnDUsed.type: type = fn_type @ReturnDUsed [concrete] // CHECK:STDOUT: %ReturnDUsed: %ReturnDUsed.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.57e: = impl_witness imports.%Destroy.impl_witness_table.15e [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D.b3dde2.1 [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %D, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.707: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.34d: %AggregateT.as_type.as.Destroy.impl.Op.type.707 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.34d, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -261,16 +232,9 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//incomplete_return, loc37_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.cabe25.1 = import_ref Main//incomplete_return, inst20 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//incomplete_return, loc37_10, loaded [concrete = constants.%complete_type.357] +// CHECK:STDOUT: %Main.import_ref.cab = import_ref Main//incomplete_return, inst20 [no loc], unloaded // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.a28: = import_ref Main//incomplete_return, loc37_9, loaded [concrete = constants.%Destroy.impl_witness.57e] -// CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//incomplete_return, loc37_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.cabe25.2 = import_ref Main//incomplete_return, inst20 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.130: type = import_ref Main//incomplete_return, loc37_9, loaded [concrete = constants.%D.b3dde2.1] -// CHECK:STDOUT: %Main.import_ref.e45: type = import_ref Main//incomplete_return, inst67 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.ed1: %D.as.Destroy.impl.Op.type = import_ref Main//incomplete_return, loc37_9, loaded [concrete = constants.%D.as.Destroy.impl.Op] -// CHECK:STDOUT: %Destroy.impl_witness_table.15e = impl_witness_table (%Main.import_ref.ed1), @D.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -290,25 +254,13 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %CallFAndGIncomplete.decl: %CallFAndGIncomplete.type = fn_decl @CallFAndGIncomplete [concrete = constants.%CallFAndGIncomplete] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: imports.%Main.import_ref.130 as imports.%Main.import_ref.e45 [from "fail_incomplete_return.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.a28 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C [from "fail_incomplete_return.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: class @D.1 [from "fail_incomplete_return.carbon"] { -// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.1 +// CHECK:STDOUT: class @D [from "fail_incomplete_return.carbon"] { +// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f2 // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.cabe25.1 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @D.2 [from "fail_incomplete_return.carbon"] { -// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.2 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.cabe25.2 +// CHECK:STDOUT: .Self = imports.%Main.import_ref.cab // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @CallFAndGIncomplete() { @@ -318,19 +270,27 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %ReturnCUsed.ref: %ReturnCUsed.type = name_ref ReturnCUsed, imports.%Main.ReturnCUsed [concrete = constants.%ReturnCUsed] // CHECK:STDOUT: %ReturnCUsed.call: init = call %ReturnCUsed.ref() // CHECK:STDOUT: %ReturnDUnused.ref: %ReturnDUnused.type = name_ref ReturnDUnused, imports.%Main.ReturnDUnused [concrete = constants.%ReturnDUnused] -// CHECK:STDOUT: %.loc33_17.1: ref %D.b3dde2.1 = temporary_storage -// CHECK:STDOUT: %ReturnDUnused.call: init %D.b3dde2.1 = call %ReturnDUnused.ref() to %.loc33_17.1 -// CHECK:STDOUT: %.loc33_17.2: ref %D.b3dde2.1 = temporary %.loc33_17.1, %ReturnDUnused.call +// CHECK:STDOUT: %.loc33_17.1: ref %D = temporary_storage +// CHECK:STDOUT: %ReturnDUnused.call: init %D = call %ReturnDUnused.ref() to %.loc33_17.1 +// CHECK:STDOUT: %.loc33_17.2: ref %D = temporary %.loc33_17.1, %ReturnDUnused.call // CHECK:STDOUT: %ReturnDUsed.ref: %ReturnDUsed.type = name_ref ReturnDUsed, imports.%Main.ReturnDUsed [concrete = constants.%ReturnDUsed] -// CHECK:STDOUT: %.loc34_15.1: ref %D.b3dde2.1 = temporary_storage -// CHECK:STDOUT: %ReturnDUsed.call: init %D.b3dde2.1 = call %ReturnDUsed.ref() to %.loc34_15.1 -// CHECK:STDOUT: %.loc34_15.2: ref %D.b3dde2.1 = temporary %.loc34_15.1, %ReturnDUsed.call -// CHECK:STDOUT: %D.as.Destroy.impl.Op.bound.loc34: = bound_method %.loc34_15.2, constants.%D.as.Destroy.impl.Op +// CHECK:STDOUT: %.loc34_15.1: ref %D = temporary_storage +// CHECK:STDOUT: %ReturnDUsed.call: init %D = call %ReturnDUsed.ref() to %.loc34_15.1 +// CHECK:STDOUT: %.loc34_15.2: ref %D = temporary %.loc34_15.1, %ReturnDUsed.call +// CHECK:STDOUT: %facet_value.loc34: %type_where = facet_value constants.%D, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc34_15.3: %type_where = converted constants.%D, %facet_value.loc34 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc34: = bound_method %.loc34_15.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.34d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.34d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc34: = bound_method %.loc34_15.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc34: %ptr.19c = addr_of %.loc34_15.2 -// CHECK:STDOUT: %D.as.Destroy.impl.Op.call.loc34: init %empty_tuple.type = call %D.as.Destroy.impl.Op.bound.loc34(%addr.loc34) -// CHECK:STDOUT: %D.as.Destroy.impl.Op.bound.loc33: = bound_method %.loc33_17.2, constants.%D.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc34: init %empty_tuple.type = call %bound_method.loc34(%addr.loc34) +// CHECK:STDOUT: %facet_value.loc33: %type_where = facet_value constants.%D, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc33_17.3: %type_where = converted constants.%D, %facet_value.loc33 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc33: = bound_method %.loc33_17.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.34d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.34d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc33: = bound_method %.loc33_17.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc33: %ptr.19c = addr_of %.loc33_17.2 -// CHECK:STDOUT: %D.as.Destroy.impl.Op.call.loc33: init %empty_tuple.type = call %D.as.Destroy.impl.Op.bound.loc33(%addr.loc33) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc33: init %empty_tuple.type = call %bound_method.loc33(%addr.loc33) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -342,5 +302,3 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: // CHECK:STDOUT: fn @ReturnDUsed [from "fail_incomplete_return.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op = "no_op" [from "fail_incomplete_return.carbon"]; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/call.carbon b/toolchain/check/testdata/function/generic/call.carbon index d5585967e3b1..593bd05cd4f5 100644 --- a/toolchain/check/testdata/function/generic/call.carbon +++ b/toolchain/check/testdata/function/generic/call.carbon @@ -97,7 +97,6 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %Copy.facet.2d1: %Copy.type = facet_value %ptr.79f, (%Copy.lookup_impl_witness.cb2) [symbolic] // CHECK:STDOUT: %Function.specific_fn.d32: = specific_function %Function, @Function(%Copy.facet.2d1) [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Copy.impl_witness.999: = impl_witness imports.%Copy.impl_witness_table.53c, @ptr.as.Copy.impl(%C) [concrete] @@ -116,14 +115,12 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // 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.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.0e4: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.31f) = import_ref Core//prelude/parts/copy, loc36_31, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.8a8)] // CHECK:STDOUT: %Copy.impl_witness_table.53c = impl_witness_table (%Core.import_ref.0e4), @ptr.as.Copy.impl [concrete] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -323,7 +320,6 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: %Copy.facet.2d1: %Copy.type = facet_value %ptr.79f, (%Copy.lookup_impl_witness.cb2) [symbolic] // CHECK:STDOUT: %Function.specific_fn.d32: = specific_function %Function, @Function(%Copy.facet.2d1) [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Copy.impl_witness.999: = impl_witness imports.%Copy.impl_witness_table.53c, @ptr.as.Copy.impl(%C) [concrete] @@ -342,14 +338,12 @@ fn CallSpecific(x: C*) -> C* { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // 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.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.0e4: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.31f) = import_ref Core//prelude/parts/copy, loc36_31, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.8a8)] // CHECK:STDOUT: %Copy.impl_witness_table.53c = impl_witness_table (%Core.import_ref.0e4), @ptr.as.Copy.impl [concrete] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { 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 023e2c1aaa8f..973c81db5d12 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 @@ -55,21 +55,9 @@ fn G() { // CHECK:STDOUT: %Generic.assoc_type.0fd877.1: type = assoc_entity_type @Generic, @Generic(%Scalar) [symbolic] // CHECK:STDOUT: %assoc0.2966cb.1: %Generic.assoc_type.0fd877.1 = assoc_entity element0, @Generic.%Generic.F.decl [symbolic] // CHECK:STDOUT: %GenericParam: type = class_type @GenericParam [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.0fd: = impl_witness @GenericParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.f73: type = ptr_type %GenericParam [concrete] -// CHECK:STDOUT: %pattern_type.7c3: type = pattern_type %ptr.f73 [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.type: type = fn_type @GenericParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op: %GenericParam.as.Destroy.impl.Op.type = 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: %ImplsGeneric: type = class_type @ImplsGeneric [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c8c: = impl_witness @ImplsGeneric.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.011: type = ptr_type %ImplsGeneric [concrete] -// CHECK:STDOUT: %pattern_type.2db: type = pattern_type %ptr.011 [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.type: type = fn_type @ImplsGeneric.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op: %ImplsGeneric.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Generic.type.621: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete] // CHECK:STDOUT: %Self.93d: %Generic.type.621 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Generic.F.type.4cf: type = fn_type @Generic.F, @Generic(%GenericParam) [concrete] @@ -117,11 +105,9 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -209,38 +195,6 @@ fn G() { // CHECK:STDOUT: witness = (%Other.G.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @GenericParam.as.Destroy.impl: @GenericParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %GenericParam.as.Destroy.impl.Op.decl: %GenericParam.as.Destroy.impl.Op.type = fn_decl @GenericParam.as.Destroy.impl.Op [concrete = constants.%GenericParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.7c3 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.7c3 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.f73 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: %self: %ptr.f73 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %GenericParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @GenericParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @ImplsGeneric.as.Destroy.impl: @ImplsGeneric.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %ImplsGeneric.as.Destroy.impl.Op.decl: %ImplsGeneric.as.Destroy.impl.Op.type = fn_decl @ImplsGeneric.as.Destroy.impl.Op [concrete = constants.%ImplsGeneric.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.2db = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.2db = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc21: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.011 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: %self: %ptr.011 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %ImplsGeneric.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @ImplsGeneric.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @ImplsGeneric.as.Generic.impl: %ImplsGeneric.ref as %Generic.type { // CHECK:STDOUT: %ImplsGeneric.as.Generic.impl.F.decl: %ImplsGeneric.as.Generic.impl.F.type = fn_decl @ImplsGeneric.as.Generic.impl.F [concrete = constants.%ImplsGeneric.as.Generic.impl.F] {} {} // CHECK:STDOUT: @@ -258,10 +212,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @GenericParam { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericParam [concrete = constants.%GenericParam] -// CHECK:STDOUT: impl_decl @GenericParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@GenericParam.as.Destroy.impl.%GenericParam.as.Destroy.impl.Op.decl), @GenericParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.0fd] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -270,10 +220,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @ImplsGeneric { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ImplsGeneric [concrete = constants.%ImplsGeneric] -// CHECK:STDOUT: impl_decl @ImplsGeneric.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@ImplsGeneric.as.Destroy.impl.%ImplsGeneric.as.Destroy.impl.Op.decl), @ImplsGeneric.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c8c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -285,10 +231,6 @@ fn G() { // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @GenericParam.as.Destroy.impl.Op(%self.param: %ptr.f73) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @ImplsGeneric.as.Destroy.impl.Op(%self.param: %ptr.011) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ImplsGeneric.as.Generic.impl.F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return diff --git a/toolchain/check/testdata/function/generic/deduce.carbon b/toolchain/check/testdata/function/generic/deduce.carbon index 9435ac5264a2..455ef883b5f5 100644 --- a/toolchain/check/testdata/function/generic/deduce.carbon +++ b/toolchain/check/testdata/function/generic/deduce.carbon @@ -509,14 +509,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = 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: %type: type = facet_type [concrete] @@ -527,16 +519,25 @@ fn F() { // CHECK:STDOUT: %ptr.79f131.1: type = ptr_type %T [symbolic] // CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f131.1 [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] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f131.1 [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %ExplicitAndAlsoDeduced.specific_fn.41d: = specific_function %ExplicitAndAlsoDeduced, @ExplicitAndAlsoDeduced(%T) [symbolic] +// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] +// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] // CHECK:STDOUT: %CallExplicitAndAlsoDeduced.type: type = fn_type @CallExplicitAndAlsoDeduced [concrete] // CHECK:STDOUT: %CallExplicitAndAlsoDeduced: %CallExplicitAndAlsoDeduced.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %ExplicitAndAlsoDeduced.specific_fn.720: = specific_function %ExplicitAndAlsoDeduced, @ExplicitAndAlsoDeduced(%A) [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %A, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d35: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.900: %AggregateT.as_type.as.Destroy.impl.Op.type.d35 = struct_value () [concrete] // CHECK:STDOUT: %complete_type.7ea: = complete_type_witness %ptr.6db [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.900, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -585,27 +586,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -613,8 +594,6 @@ fn F() { // CHECK:STDOUT: .Self = constants.%A // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @ExplicitAndAlsoDeduced(%T.loc6_27.2: type) { // CHECK:STDOUT: %T.loc6_27.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_27.1 (constants.%T)] // CHECK:STDOUT: %pattern_type.loc6_37: type = pattern_type %T.loc6_27.1 [symbolic = %pattern_type.loc6_37 (constants.%pattern_type.7dc)] @@ -649,9 +628,13 @@ fn F() { // CHECK:STDOUT: %.loc11_37.5: ref %A = converted %.loc11_37.1, %.loc11_37.4 // CHECK:STDOUT: %.loc11_37.6: %A = bind_value %.loc11_37.5 // CHECK:STDOUT: %ExplicitAndAlsoDeduced.call: init %ptr.6db = call %ExplicitAndAlsoDeduced.specific_fn(%.loc11_37.6) -// CHECK:STDOUT: %A.as.Destroy.impl.Op.bound: = bound_method %.loc11_37.4, constants.%A.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%A, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc11_37.7: %type_where = converted constants.%A, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc11_37.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.900 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.900, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc11_37.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.6db = addr_of %.loc11_37.4 -// CHECK:STDOUT: %A.as.Destroy.impl.Op.call: init %empty_tuple.type = call %A.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return %ExplicitAndAlsoDeduced.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1592,15 +1575,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete] -// CHECK:STDOUT: %Self.1d7: %Z.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %EE: type = class_type @EE [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.9db: = impl_witness @EE.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.7d7: type = ptr_type %EE [concrete] -// CHECK:STDOUT: %pattern_type.04a: type = pattern_type %ptr.7d7 [concrete] -// CHECK:STDOUT: %EE.as.Destroy.impl.Op.type: type = fn_type @EE.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %EE.as.Destroy.impl.Op: %EE.as.Destroy.impl.Op.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: %Z.impl_witness.8f7: = impl_witness file.%Z.impl_witness_table.loc6 [concrete] @@ -1611,22 +1587,12 @@ fn F() { // CHECK:STDOUT: %DD.type: type = generic_class_type @DD [concrete] // CHECK:STDOUT: %DD.generic: %DD.type = struct_value () [concrete] // CHECK:STDOUT: %DD.296: type = class_type @DD, @DD(%E) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.9c0: = impl_witness @DD.%Destroy.impl_witness_table, @DD.as.Destroy.impl(%E) [symbolic] -// CHECK:STDOUT: %ptr.964: type = ptr_type %DD.296 [symbolic] -// CHECK:STDOUT: %pattern_type.75a: type = pattern_type %ptr.964 [symbolic] -// CHECK:STDOUT: %DD.as.Destroy.impl.Op.type: type = fn_type @DD.as.Destroy.impl.Op, @DD.as.Destroy.impl(%E) [symbolic] -// CHECK:STDOUT: %DD.as.Destroy.impl.Op: %DD.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %Z.impl_witness.cac: = impl_witness file.%Z.impl_witness_table.loc9, @DD.as.Z.impl(%E) [symbolic] // CHECK:STDOUT: %D: %Z.type = bind_symbolic_name D, 0 [symbolic] // CHECK:STDOUT: %pattern_type.4a0: type = pattern_type %Z.type [concrete] // CHECK:STDOUT: %CC.type: type = generic_class_type @CC [concrete] // CHECK:STDOUT: %CC.generic: %CC.type = struct_value () [concrete] // CHECK:STDOUT: %CC.7e3: type = class_type @CC, @CC(%D) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.064: = impl_witness @CC.%Destroy.impl_witness_table, @CC.as.Destroy.impl(%D) [symbolic] -// CHECK:STDOUT: %ptr.545: type = ptr_type %CC.7e3 [symbolic] -// CHECK:STDOUT: %pattern_type.331: type = pattern_type %ptr.545 [symbolic] -// CHECK:STDOUT: %CC.as.Destroy.impl.Op.type: type = fn_type @CC.as.Destroy.impl.Op, @CC.as.Destroy.impl(%D) [symbolic] -// CHECK:STDOUT: %CC.as.Destroy.impl.Op: %CC.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %Z.lookup_impl_witness: = lookup_impl_witness %DD.296, @Z [symbolic] // CHECK:STDOUT: %Z.facet.bf0: %Z.type = facet_value %DD.296, (%Z.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %CC.8ff: type = class_type @CC, @CC(%Z.facet.bf0) [symbolic] @@ -1643,11 +1609,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1715,63 +1679,18 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Z { -// CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1d7] +// CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @EE.as.Destroy.impl: @EE.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %EE.as.Destroy.impl.Op.decl: %EE.as.Destroy.impl.Op.type = fn_decl @EE.as.Destroy.impl.Op [concrete = constants.%EE.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.04a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.04a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.7d7 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%EE [concrete = constants.%EE] -// CHECK:STDOUT: %self: %ptr.7d7 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %EE.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @EE.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @EE.as.Z.impl: %EE.ref as %Z.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Z.impl_witness.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @DD.as.Destroy.impl(@DD.%E.loc8_10.2: type) { -// CHECK:STDOUT: %E: type = bind_symbolic_name E, 0 [symbolic = %E (constants.%E)] -// CHECK:STDOUT: %DD: type = class_type @DD, @DD(%E) [symbolic = %DD (constants.%DD.296)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @DD.%Destroy.impl_witness_table, @DD.as.Destroy.impl(%E) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.9c0)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %DD.as.Destroy.impl.Op.type: type = fn_type @DD.as.Destroy.impl.Op, @DD.as.Destroy.impl(%E) [symbolic = %DD.as.Destroy.impl.Op.type (constants.%DD.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %DD.as.Destroy.impl.Op: @DD.as.Destroy.impl.%DD.as.Destroy.impl.Op.type (%DD.as.Destroy.impl.Op.type) = struct_value () [symbolic = %DD.as.Destroy.impl.Op (constants.%DD.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @DD.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %DD.as.Destroy.impl.Op.decl: @DD.as.Destroy.impl.%DD.as.Destroy.impl.Op.type (%DD.as.Destroy.impl.Op.type) = fn_decl @DD.as.Destroy.impl.Op [symbolic = @DD.as.Destroy.impl.%DD.as.Destroy.impl.Op (constants.%DD.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @DD.as.Destroy.impl.Op.%pattern_type (%pattern_type.75a) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @DD.as.Destroy.impl.Op.%pattern_type (%pattern_type.75a) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8_20.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @DD.as.Destroy.impl.Op.%ptr (%ptr.964) = value_param call_param0 -// CHECK:STDOUT: %.loc8_20.2: type = splice_block %Self.ref [symbolic = %DD (constants.%DD.296)] { -// CHECK:STDOUT: %.loc8_20.3: type = specific_constant constants.%DD.296, @DD(constants.%E) [symbolic = %DD (constants.%DD.296)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc8_20.3 [symbolic = %DD (constants.%DD.296)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @DD.as.Destroy.impl.Op.%ptr (%ptr.964) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %DD.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @DD.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @DD.as.Z.impl(%E.loc9_14.1: type) { // CHECK:STDOUT: %E.loc9_14.2: type = bind_symbolic_name E, 0 [symbolic = %E.loc9_14.2 (constants.%E)] // CHECK:STDOUT: %DD.loc9_28.2: type = class_type @DD, @DD(%E.loc9_14.2) [symbolic = %DD.loc9_28.2 (constants.%DD.296)] @@ -1785,35 +1704,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @CC.as.Destroy.impl(@CC.%D.loc11_10.2: %Z.type) { -// CHECK:STDOUT: %D: %Z.type = bind_symbolic_name D, 0 [symbolic = %D (constants.%D)] -// CHECK:STDOUT: %CC: type = class_type @CC, @CC(%D) [symbolic = %CC (constants.%CC.7e3)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @CC.%Destroy.impl_witness_table, @CC.as.Destroy.impl(%D) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.064)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CC.as.Destroy.impl.Op.type: type = fn_type @CC.as.Destroy.impl.Op, @CC.as.Destroy.impl(%D) [symbolic = %CC.as.Destroy.impl.Op.type (constants.%CC.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %CC.as.Destroy.impl.Op: @CC.as.Destroy.impl.%CC.as.Destroy.impl.Op.type (%CC.as.Destroy.impl.Op.type) = struct_value () [symbolic = %CC.as.Destroy.impl.Op (constants.%CC.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @CC.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %CC.as.Destroy.impl.Op.decl: @CC.as.Destroy.impl.%CC.as.Destroy.impl.Op.type (%CC.as.Destroy.impl.Op.type) = fn_decl @CC.as.Destroy.impl.Op [symbolic = @CC.as.Destroy.impl.%CC.as.Destroy.impl.Op (constants.%CC.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @CC.as.Destroy.impl.Op.%pattern_type (%pattern_type.331) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @CC.as.Destroy.impl.Op.%pattern_type (%pattern_type.331) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11_17.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @CC.as.Destroy.impl.Op.%ptr (%ptr.545) = value_param call_param0 -// CHECK:STDOUT: %.loc11_17.2: type = splice_block %Self.ref [symbolic = %CC (constants.%CC.7e3)] { -// CHECK:STDOUT: %.loc11_17.3: type = specific_constant constants.%CC.7e3, @CC(constants.%D) [symbolic = %CC (constants.%CC.7e3)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc11_17.3 [symbolic = %CC (constants.%CC.7e3)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @CC.as.Destroy.impl.Op.%ptr (%ptr.545) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %CC.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @CC.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @CC.as.Z.impl(%E.loc12_14.1: type) { // CHECK:STDOUT: %E.loc12_14.2: type = bind_symbolic_name E, 0 [symbolic = %E.loc12_14.2 (constants.%E)] // CHECK:STDOUT: %DD.loc12_31.2: type = class_type @DD, @DD(%E.loc12_14.2) [symbolic = %DD.loc12_31.2 (constants.%DD.296)] @@ -1831,10 +1721,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @EE { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%EE [concrete = constants.%EE] -// CHECK:STDOUT: impl_decl @EE.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@EE.as.Destroy.impl.%EE.as.Destroy.impl.Op.decl), @EE.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.9db] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1848,10 +1734,6 @@ fn F() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%DD.296 [symbolic = @DD.as.Destroy.impl.%DD (constants.%DD.296)] -// CHECK:STDOUT: impl_decl @DD.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@DD.as.Destroy.impl.%DD.as.Destroy.impl.Op.decl), @DD.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @DD.as.Destroy.impl(constants.%E) [symbolic = @DD.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.9c0)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1866,10 +1748,6 @@ fn F() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%CC.7e3 [symbolic = @CC.as.Destroy.impl.%CC (constants.%CC.7e3)] -// CHECK:STDOUT: impl_decl @CC.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@CC.as.Destroy.impl.%CC.as.Destroy.impl.Op.decl), @CC.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @CC.as.Destroy.impl(constants.%D) [symbolic = @CC.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.064)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1878,30 +1756,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @EE.as.Destroy.impl.Op(%self.param: %ptr.7d7) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @DD.as.Destroy.impl.Op(@DD.%E.loc8_10.2: type) { -// CHECK:STDOUT: %E: type = bind_symbolic_name E, 0 [symbolic = %E (constants.%E)] -// CHECK:STDOUT: %DD: type = class_type @DD, @DD(%E) [symbolic = %DD (constants.%DD.296)] -// CHECK:STDOUT: %ptr: type = ptr_type %DD [symbolic = %ptr (constants.%ptr.964)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.75a)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @DD.as.Destroy.impl.Op.%ptr (%ptr.964)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @CC.as.Destroy.impl.Op(@CC.%D.loc11_10.2: %Z.type) { -// CHECK:STDOUT: %D: %Z.type = bind_symbolic_name D, 0 [symbolic = %D (constants.%D)] -// CHECK:STDOUT: %CC: type = class_type @CC, @CC(%D) [symbolic = %CC (constants.%CC.7e3)] -// CHECK:STDOUT: %ptr: type = ptr_type %CC [symbolic = %ptr (constants.%ptr.545)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.331)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @CC.as.Destroy.impl.Op.%ptr (%ptr.545)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %CC.ref: %CC.type = name_ref CC, file.%CC.decl [concrete = constants.%CC.generic] @@ -1921,19 +1775,6 @@ fn F() { // CHECK:STDOUT: %E.loc8_10.1 => constants.%E // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @DD.as.Destroy.impl(constants.%E) { -// CHECK:STDOUT: %E => constants.%E -// CHECK:STDOUT: %DD => constants.%DD.296 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.9c0 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @DD.as.Destroy.impl.Op(constants.%E) { -// CHECK:STDOUT: %E => constants.%E -// CHECK:STDOUT: %DD => constants.%DD.296 -// CHECK:STDOUT: %ptr => constants.%ptr.964 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.75a -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @DD.as.Z.impl(constants.%E) { // CHECK:STDOUT: %E.loc9_14.2 => constants.%E // CHECK:STDOUT: %DD.loc9_28.2 => constants.%DD.296 @@ -1946,19 +1787,6 @@ fn F() { // CHECK:STDOUT: %D.loc11_10.1 => constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @CC.as.Destroy.impl(constants.%D) { -// CHECK:STDOUT: %D => constants.%D -// CHECK:STDOUT: %CC => constants.%CC.7e3 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.064 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CC.as.Destroy.impl.Op(constants.%D) { -// CHECK:STDOUT: %D => constants.%D -// CHECK:STDOUT: %CC => constants.%CC.7e3 -// CHECK:STDOUT: %ptr => constants.%ptr.545 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.331 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @CC(constants.%Z.facet.bf0) { // CHECK:STDOUT: %D.loc11_10.1 => constants.%Z.facet.bf0 // CHECK:STDOUT: } 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 56c1b5b3ef75..284e06181ac0 100644 --- a/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon +++ b/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon @@ -45,13 +45,6 @@ fn F() { // CHECK:STDOUT: %W.type: type = facet_type <@W> [concrete] // CHECK:STDOUT: %Self.7b5: %W.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %DD: type = class_type @DD [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.31d: = impl_witness @DD.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.3d1: type = ptr_type %DD [concrete] -// CHECK:STDOUT: %pattern_type.3fc: type = pattern_type %ptr.3d1 [concrete] -// CHECK:STDOUT: %DD.as.Destroy.impl.Op.type: type = fn_type @DD.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %DD.as.Destroy.impl.Op: %DD.as.Destroy.impl.Op.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: %Y.impl_witness: = impl_witness file.%Y.impl_witness_table [concrete] @@ -63,11 +56,6 @@ fn F() { // CHECK:STDOUT: %CC.type: type = generic_class_type @CC [concrete] // CHECK:STDOUT: %CC.generic: %CC.type = struct_value () [concrete] // CHECK:STDOUT: %CC.ef8: type = class_type @CC, @CC(%D) [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.520: = impl_witness @CC.%Destroy.impl_witness_table, @CC.as.Destroy.impl(%D) [symbolic] -// CHECK:STDOUT: %ptr.791: type = ptr_type %CC.ef8 [symbolic] -// CHECK:STDOUT: %pattern_type.931: type = pattern_type %ptr.791 [symbolic] -// CHECK:STDOUT: %CC.as.Destroy.impl.Op.type: type = fn_type @CC.as.Destroy.impl.Op, @CC.as.Destroy.impl(%D) [symbolic] -// CHECK:STDOUT: %CC.as.Destroy.impl.Op: %CC.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete] // CHECK:STDOUT: %Self.1d7: %Z.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %BitAndWith.type.f2e: type = generic_interface_type @BitAndWith [concrete] @@ -99,12 +87,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .BitAndWith = %Core.BitAndWith // 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.BitAndWith: %BitAndWith.type.f2e = import_ref Core//prelude/parts/as, BitAndWith, loaded [concrete = constants.%BitAndWith.generic] // CHECK:STDOUT: %Core.import_ref.636: %type.as.BitAndWith.impl.Op.type = import_ref Core//prelude/parts/as, loc25_42, loaded [concrete = constants.%type.as.BitAndWith.impl.Op] // CHECK:STDOUT: %BitAndWith.impl_witness_table = impl_witness_table (%Core.import_ref.636), @type.as.BitAndWith.impl [concrete] @@ -197,22 +183,6 @@ fn F() { // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @DD.as.Destroy.impl: @DD.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %DD.as.Destroy.impl.Op.decl: %DD.as.Destroy.impl.Op.type = fn_decl @DD.as.Destroy.impl.Op [concrete = constants.%DD.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.3fc = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.3fc = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.3d1 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%DD [concrete = constants.%DD] -// CHECK:STDOUT: %self: %ptr.3d1 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %DD.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @DD.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @DD.as.Y.impl: %DD.ref as %Y.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Y.impl_witness @@ -223,35 +193,6 @@ fn F() { // CHECK:STDOUT: witness = file.%W.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @CC.as.Destroy.impl(@CC.%D.loc12_10.2: %Y.type) { -// CHECK:STDOUT: %D: %Y.type = bind_symbolic_name D, 0 [symbolic = %D (constants.%D)] -// CHECK:STDOUT: %CC: type = class_type @CC, @CC(%D) [symbolic = %CC (constants.%CC.ef8)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @CC.%Destroy.impl_witness_table, @CC.as.Destroy.impl(%D) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.520)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %CC.as.Destroy.impl.Op.type: type = fn_type @CC.as.Destroy.impl.Op, @CC.as.Destroy.impl(%D) [symbolic = %CC.as.Destroy.impl.Op.type (constants.%CC.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %CC.as.Destroy.impl.Op: @CC.as.Destroy.impl.%CC.as.Destroy.impl.Op.type (%CC.as.Destroy.impl.Op.type) = struct_value () [symbolic = %CC.as.Destroy.impl.Op (constants.%CC.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @CC.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %CC.as.Destroy.impl.Op.decl: @CC.as.Destroy.impl.%CC.as.Destroy.impl.Op.type (%CC.as.Destroy.impl.Op.type) = fn_decl @CC.as.Destroy.impl.Op [symbolic = @CC.as.Destroy.impl.%CC.as.Destroy.impl.Op (constants.%CC.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @CC.as.Destroy.impl.Op.%pattern_type (%pattern_type.931) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @CC.as.Destroy.impl.Op.%pattern_type (%pattern_type.931) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12_17.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @CC.as.Destroy.impl.Op.%ptr (%ptr.791) = value_param call_param0 -// CHECK:STDOUT: %.loc12_17.2: type = splice_block %Self.ref [symbolic = %CC (constants.%CC.ef8)] { -// CHECK:STDOUT: %.loc12_17.3: type = specific_constant constants.%CC.ef8, @CC(constants.%D) [symbolic = %CC (constants.%CC.ef8)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc12_17.3 [symbolic = %CC (constants.%CC.ef8)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @CC.as.Destroy.impl.Op.%ptr (%ptr.791) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %CC.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @CC.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @CC.as.Z.impl(%E.loc19_14.1: %facet_type) { // CHECK:STDOUT: %E.loc19_14.2: %facet_type = bind_symbolic_name E, 0 [symbolic = %E.loc19_14.2 (constants.%E)] // CHECK:STDOUT: %Y.lookup_impl_witness: = lookup_impl_witness %E.loc19_14.2, @Y [symbolic = %Y.lookup_impl_witness (constants.%Y.lookup_impl_witness)] @@ -269,10 +210,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @DD { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%DD [concrete = constants.%DD] -// CHECK:STDOUT: impl_decl @DD.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@DD.as.Destroy.impl.%DD.as.Destroy.impl.Op.decl), @DD.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.31d] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -286,10 +223,6 @@ fn F() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%CC.ef8 [symbolic = @CC.as.Destroy.impl.%CC (constants.%CC.ef8)] -// CHECK:STDOUT: impl_decl @CC.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@CC.as.Destroy.impl.%CC.as.Destroy.impl.Op.decl), @CC.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @CC.as.Destroy.impl(constants.%D) [symbolic = @CC.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.520)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -298,19 +231,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DD.as.Destroy.impl.Op(%self.param: %ptr.3d1) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @CC.as.Destroy.impl.Op(@CC.%D.loc12_10.2: %Y.type) { -// CHECK:STDOUT: %D: %Y.type = bind_symbolic_name D, 0 [symbolic = %D (constants.%D)] -// CHECK:STDOUT: %CC: type = class_type @CC, @CC(%D) [symbolic = %CC (constants.%CC.ef8)] -// CHECK:STDOUT: %ptr: type = ptr_type %CC [symbolic = %ptr (constants.%ptr.791)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.931)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @CC.as.Destroy.impl.Op.%ptr (%ptr.791)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %CC.ref: %CC.type = name_ref CC, file.%CC.decl [concrete = constants.%CC.generic] @@ -330,19 +250,6 @@ fn F() { // CHECK:STDOUT: %D.loc12_10.1 => constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @CC.as.Destroy.impl(constants.%D) { -// CHECK:STDOUT: %D => constants.%D -// CHECK:STDOUT: %CC => constants.%CC.ef8 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.520 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @CC.as.Destroy.impl.Op(constants.%D) { -// CHECK:STDOUT: %D => constants.%D -// CHECK:STDOUT: %CC => constants.%CC.ef8 -// CHECK:STDOUT: %ptr => constants.%ptr.791 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.931 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @CC(constants.%Y.facet.682) { // CHECK:STDOUT: %D.loc12_10.1 => constants.%Y.facet.682 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/function/generic/resolve_used.carbon b/toolchain/check/testdata/function/generic/resolve_used.carbon index 146db301beb7..5d2e025bbb28 100644 --- a/toolchain/check/testdata/function/generic/resolve_used.carbon +++ b/toolchain/check/testdata/function/generic/resolve_used.carbon @@ -57,14 +57,18 @@ fn CallNegative() { // CHECK:STDOUT: %pattern_type.896: type = pattern_type %Int [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.44e: = impl_witness imports.%Destroy.impl_witness_table.ad0, @Int.as.Destroy.impl(%N) [symbolic] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.0eb: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%N) [symbolic] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.cb4: %Int.as.Destroy.impl.Op.type.0eb = struct_value () [symbolic] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %AggregateT: %type_where = bind_symbolic_name AggregateT, 0 [symbolic] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.190: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%AggregateT) [symbolic] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.8a0: %AggregateT.as_type.as.Destroy.impl.Op.type.190 = struct_value () [symbolic] +// CHECK:STDOUT: %facet_value.818: %type_where = facet_value %Int, () [symbolic] // CHECK:STDOUT: %ptr.784: type = ptr_type %Int [symbolic] -// CHECK:STDOUT: %Destroy.facet.17e: %Destroy.type = facet_value %Int, (%Destroy.impl_witness.44e) [symbolic] -// CHECK:STDOUT: %.819: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.17e [symbolic] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.98d: = specific_function %Int.as.Destroy.impl.Op.cb4, @Int.as.Destroy.impl.Op(%N) [symbolic] // CHECK:STDOUT: %require_complete.0f5: = require_complete_type %ptr.784 [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.34a: = lookup_impl_witness %Int, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.facet.267: %Destroy.type = facet_value %Int, (%Destroy.lookup_impl_witness.34a) [symbolic] +// CHECK:STDOUT: %.358: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.267 [symbolic] +// CHECK:STDOUT: %impl.elem0.999: %.358 = impl_witness_access %Destroy.lookup_impl_witness.34a, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.5f7: = specific_impl_function %impl.elem0.999, @Destroy.Op(%Destroy.facet.267) [symbolic] // CHECK:STDOUT: %CallNegative.type: type = fn_type @CallNegative [concrete] // CHECK:STDOUT: %CallNegative: %CallNegative.type = struct_value () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -72,14 +76,15 @@ fn CallNegative() { // CHECK:STDOUT: %i0: type = class_type @Int, @Int(%int_0) [concrete] // CHECK:STDOUT: %complete_type.d94: = complete_type_witness [concrete] // CHECK:STDOUT: %pattern_type.47b: type = pattern_type %i0 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.9a0: = impl_witness imports.%Destroy.impl_witness_table.ad0, @Int.as.Destroy.impl(%int_0) [concrete] -// CHECK:STDOUT: %Destroy.facet.f73: %Destroy.type = facet_value %i0, (%Destroy.impl_witness.9a0) [concrete] -// CHECK:STDOUT: %.6dc: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.f73 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.562: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_0) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.f56: %Int.as.Destroy.impl.Op.type.562 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.5b4: %type_where = facet_value %i0, () [concrete] +// CHECK:STDOUT: %Destroy.impl_witness.20d: = impl_witness imports.%Destroy.impl_witness_table.2d3, @AggregateT.as_type.as.Destroy.impl(%facet_value.5b4) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.59e: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.5b4) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.701: %AggregateT.as_type.as.Destroy.impl.Op.type.59e = struct_value () [concrete] // CHECK:STDOUT: %ptr.3f1: type = ptr_type %i0 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.b58: = specific_function %Int.as.Destroy.impl.Op.f56, @Int.as.Destroy.impl.Op(%int_0) [concrete] // CHECK:STDOUT: %complete_type.588: = complete_type_witness %ptr.3f1 [concrete] +// CHECK:STDOUT: %Destroy.facet.168: %Destroy.type = facet_value %i0, (%Destroy.impl_witness.20d) [concrete] +// CHECK:STDOUT: %.6d5: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.168 [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.701, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.5b4) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -93,8 +98,8 @@ fn CallNegative() { // CHECK:STDOUT: %Core.IntLiteral: %IntLiteral.type = import_ref Core//prelude/parts/int_literal, IntLiteral, loaded [concrete = constants.%IntLiteral] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Core.import_ref.183: @Int.as.Destroy.impl.%Int.as.Destroy.impl.Op.type (%Int.as.Destroy.impl.Op.type.0eb) = import_ref Core//prelude/parts/int, loc10_29, loaded [symbolic = @Int.as.Destroy.impl.%Int.as.Destroy.impl.Op (constants.%Int.as.Destroy.impl.Op.cb4)] -// CHECK:STDOUT: %Destroy.impl_witness_table.ad0 = impl_witness_table (%Core.import_ref.183), @Int.as.Destroy.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.d51: @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op.type (%AggregateT.as_type.as.Destroy.impl.Op.type.190) = import_ref Core//prelude/parts/destroy, loc29_29, loaded [symbolic = @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op (constants.%AggregateT.as_type.as.Destroy.impl.Op.8a0)] +// CHECK:STDOUT: %Destroy.impl_witness_table.2d3 = impl_witness_table (%Core.import_ref.d51), @AggregateT.as_type.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -118,6 +123,8 @@ fn CallNegative() { // CHECK:STDOUT: %N.loc4_19.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc4_19.1 (constants.%N)] // CHECK:STDOUT: } // CHECK:STDOUT: %CallNegative.decl: %CallNegative.type = fn_decl @CallNegative [concrete = constants.%CallNegative] {} {} +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i0, () [concrete = constants.%facet_value.5b4] +// CHECK:STDOUT: %.loc15: %type_where = converted constants.%i0, %facet_value [concrete = constants.%facet_value.5b4] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ErrorIfNIsZero(%N.loc4_19.2: Core.IntLiteral) { @@ -127,12 +134,12 @@ fn CallNegative() { // CHECK:STDOUT: %Int.loc15_20.2: type = class_type @Int, @Int(%N.loc4_19.1) [symbolic = %Int.loc15_20.2 (constants.%Int)] // CHECK:STDOUT: %require_complete.loc15_20: = require_complete_type %Int.loc15_20.2 [symbolic = %require_complete.loc15_20 (constants.%require_complete.b4f)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Int.loc15_20.2 [symbolic = %pattern_type (constants.%pattern_type.896)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.ad0, @Int.as.Destroy.impl(%N.loc4_19.1) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.44e)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Int.loc15_20.2, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.17e)] -// CHECK:STDOUT: %.loc15_3: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc15_3 (constants.%.819)] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%N.loc4_19.1) [symbolic = %Int.as.Destroy.impl.Op.type (constants.%Int.as.Destroy.impl.Op.type.0eb)] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op: @ErrorIfNIsZero.%Int.as.Destroy.impl.Op.type (%Int.as.Destroy.impl.Op.type.0eb) = struct_value () [symbolic = %Int.as.Destroy.impl.Op (constants.%Int.as.Destroy.impl.Op.cb4)] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op, @Int.as.Destroy.impl.Op(%N.loc4_19.1) [symbolic = %Int.as.Destroy.impl.Op.specific_fn (constants.%Int.as.Destroy.impl.Op.specific_fn.98d)] +// CHECK:STDOUT: %facet_value.loc15_3.2: %type_where = facet_value %Int.loc15_20.2, () [symbolic = %facet_value.loc15_3.2 (constants.%facet_value.818)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Int.loc15_20.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.34a)] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %Int.loc15_20.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.267)] +// CHECK:STDOUT: %.loc15_3.3: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc15_3.3 (constants.%.358)] +// CHECK:STDOUT: %impl.elem0.loc15_3.2: @ErrorIfNIsZero.%.loc15_3.3 (%.358) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc15_3.2 (constants.%impl.elem0.999)] +// CHECK:STDOUT: %specific_impl_fn.loc15_3.2: = specific_impl_function %impl.elem0.loc15_3.2, @Destroy.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc15_3.2 (constants.%specific_impl_fn.5f7)] // CHECK:STDOUT: %ptr: type = ptr_type %Int.loc15_20.2 [symbolic = %ptr (constants.%ptr.784)] // CHECK:STDOUT: %require_complete.loc15_3: = require_complete_type %ptr [symbolic = %require_complete.loc15_3 (constants.%require_complete.0f5)] // CHECK:STDOUT: @@ -150,12 +157,14 @@ fn CallNegative() { // CHECK:STDOUT: %Int.loc15_20.1: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc15_20.2 (constants.%Int)] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @ErrorIfNIsZero.%Int.loc15_20.2 (%Int) = bind_name v, %v.var -// CHECK:STDOUT: %impl.elem0: @ErrorIfNIsZero.%.loc15_3 (%.819) = impl_witness_access constants.%Destroy.impl_witness.44e, element0 [symbolic = %Int.as.Destroy.impl.Op (constants.%Int.as.Destroy.impl.Op.cb4)] -// CHECK:STDOUT: %bound_method.loc15_3.1: = bound_method %v.var, %impl.elem0 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Int.as.Destroy.impl.Op(constants.%N) [symbolic = %Int.as.Destroy.impl.Op.specific_fn (constants.%Int.as.Destroy.impl.Op.specific_fn.98d)] -// CHECK:STDOUT: %bound_method.loc15_3.2: = bound_method %v.var, %specific_fn +// CHECK:STDOUT: %facet_value.loc15_3.1: %type_where = facet_value constants.%Int, () [symbolic = %facet_value.loc15_3.2 (constants.%facet_value.818)] +// CHECK:STDOUT: %.loc15_3.1: %type_where = converted constants.%Int, %facet_value.loc15_3.1 [symbolic = %facet_value.loc15_3.2 (constants.%facet_value.818)] +// CHECK:STDOUT: %impl.elem0.loc15_3.1: @ErrorIfNIsZero.%.loc15_3.3 (%.358) = impl_witness_access constants.%Destroy.lookup_impl_witness.34a, element0 [symbolic = %impl.elem0.loc15_3.2 (constants.%impl.elem0.999)] +// CHECK:STDOUT: %bound_method.loc15_3.1: = bound_method %v.var, %impl.elem0.loc15_3.1 +// CHECK:STDOUT: %specific_impl_fn.loc15_3.1: = specific_impl_function %impl.elem0.loc15_3.1, @Destroy.Op(constants.%Destroy.facet.267) [symbolic = %specific_impl_fn.loc15_3.2 (constants.%specific_impl_fn.5f7)] +// CHECK:STDOUT: %bound_method.loc15_3.2: = bound_method %v.var, %specific_impl_fn.loc15_3.1 // CHECK:STDOUT: %addr: @ErrorIfNIsZero.%ptr (%ptr.784) = addr_of %v.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc15_3.2(%addr) +// CHECK:STDOUT: %.loc15_3.2: init %empty_tuple.type = call %bound_method.loc15_3.2(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -180,12 +189,12 @@ fn CallNegative() { // CHECK:STDOUT: %Int.loc15_20.2 => constants.%i0 // CHECK:STDOUT: %require_complete.loc15_20 => constants.%complete_type.d94 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.47b -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.9a0 -// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.f73 -// CHECK:STDOUT: %.loc15_3 => constants.%.6dc -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type => constants.%Int.as.Destroy.impl.Op.type.562 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op => constants.%Int.as.Destroy.impl.Op.f56 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn => constants.%Int.as.Destroy.impl.Op.specific_fn.b58 +// CHECK:STDOUT: %facet_value.loc15_3.2 => constants.%facet_value.5b4 +// CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%Destroy.impl_witness.20d +// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.168 +// CHECK:STDOUT: %.loc15_3.3 => constants.%.6d5 +// CHECK:STDOUT: %impl.elem0.loc15_3.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.701 +// CHECK:STDOUT: %specific_impl_fn.loc15_3.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %ptr => constants.%ptr.3f1 // CHECK:STDOUT: %require_complete.loc15_3 => constants.%complete_type.588 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/function/generic/return_slot.carbon b/toolchain/check/testdata/function/generic/return_slot.carbon index 7723b1c3884d..030c7c7f4f9e 100644 --- a/toolchain/check/testdata/function/generic/return_slot.carbon +++ b/toolchain/check/testdata/function/generic/return_slot.carbon @@ -38,13 +38,6 @@ fn G() { // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Wrap.Make.type.652: type = fn_type @Wrap.Make, @Wrap(%T) [symbolic] // CHECK:STDOUT: %Wrap.Make.eb2: %Wrap.Make.type.652 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.a83: = impl_witness @Wrap.%Destroy.impl_witness_table, @Wrap.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.b45: type = ptr_type %Wrap.af6 [symbolic] -// CHECK:STDOUT: %pattern_type.3b2: type = pattern_type %ptr.b45 [symbolic] -// CHECK:STDOUT: %Wrap.as.Destroy.impl.Op.type: type = fn_type @Wrap.as.Destroy.impl.Op, @Wrap.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %Wrap.as.Destroy.impl.Op: %Wrap.as.Destroy.impl.Op.type = 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.4ae: = require_complete_type %T [symbolic] @@ -59,11 +52,6 @@ fn G() { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %array_type [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.arr.5f2: type = struct_type {.arr: %array_type} [concrete] // CHECK:STDOUT: %complete_type.22a: = complete_type_witness %struct_type.arr.5f2 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -83,28 +71,35 @@ fn G() { // CHECK:STDOUT: %Wrap.Make.type.708: type = fn_type @Wrap.Make, @Wrap(%C) [concrete] // CHECK:STDOUT: %Wrap.Make.e4b: %Wrap.Make.type.708 = struct_value () [concrete] // CHECK:STDOUT: %Wrap.Make.specific_fn.834: = specific_function %Wrap.Make.e4b, @Wrap.Make(%C) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] -// CHECK:STDOUT: %facet_value: %type_where = facet_value %empty_tuple.type, () [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.4e0: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %facet_value.be8: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.be8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.003: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.be8) [concrete] +// CHECK:STDOUT: %facet_value.ff9: %type_where = facet_value %empty_tuple.type, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.4e0: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.ff9) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.c00: %AggregateT.as_type.as.Destroy.impl.Op.type.4e0 = struct_value () [concrete] // CHECK:STDOUT: %ptr.843: type = ptr_type %empty_tuple.type [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.c00, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.a54: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.c00, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.ff9) [concrete] +// CHECK:STDOUT: %facet_value.d23: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d23) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d23) [concrete] // CHECK:STDOUT: %complete_type.782: = complete_type_witness %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int +// 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -125,51 +120,6 @@ fn G() { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Wrap.as.Destroy.impl(@Wrap.%T.loc15_12.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Wrap: type = class_type @Wrap, @Wrap(%T) [symbolic = %Wrap (constants.%Wrap.af6)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Wrap.%Destroy.impl_witness_table, @Wrap.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.a83)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Wrap.as.Destroy.impl.Op.type: type = fn_type @Wrap.as.Destroy.impl.Op, @Wrap.as.Destroy.impl(%T) [symbolic = %Wrap.as.Destroy.impl.Op.type (constants.%Wrap.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Wrap.as.Destroy.impl.Op: @Wrap.as.Destroy.impl.%Wrap.as.Destroy.impl.Op.type (%Wrap.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Wrap.as.Destroy.impl.Op (constants.%Wrap.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Wrap.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Wrap.as.Destroy.impl.Op.decl: @Wrap.as.Destroy.impl.%Wrap.as.Destroy.impl.Op.type (%Wrap.as.Destroy.impl.Op.type) = fn_decl @Wrap.as.Destroy.impl.Op [symbolic = @Wrap.as.Destroy.impl.%Wrap.as.Destroy.impl.Op (constants.%Wrap.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Wrap.as.Destroy.impl.Op.%pattern_type (%pattern_type.3b2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Wrap.as.Destroy.impl.Op.%pattern_type (%pattern_type.3b2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15_22.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Wrap.as.Destroy.impl.Op.%ptr (%ptr.b45) = value_param call_param0 -// CHECK:STDOUT: %.loc15_22.2: type = splice_block %Self.ref [symbolic = %Wrap (constants.%Wrap.af6)] { -// CHECK:STDOUT: %.loc15_22.3: type = specific_constant constants.%Wrap.af6, @Wrap(constants.%T) [symbolic = %Wrap (constants.%Wrap.af6)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc15_22.3 [symbolic = %Wrap (constants.%Wrap.af6)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Wrap.as.Destroy.impl.Op.%ptr (%ptr.b45) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Wrap.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Wrap.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Wrap(%T.loc15_12.2: type) { // CHECK:STDOUT: %T.loc15_12.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_12.1 (constants.%T)] // CHECK:STDOUT: @@ -186,10 +136,6 @@ fn G() { // CHECK:STDOUT: %return.param: ref @Wrap.Make.%T (%T) = out_param call_param0 // CHECK:STDOUT: %return: ref @Wrap.Make.%T (%T) = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Wrap.af6 [symbolic = @Wrap.as.Destroy.impl.%Wrap (constants.%Wrap.af6)] -// CHECK:STDOUT: impl_decl @Wrap.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Wrap.as.Destroy.impl.%Wrap.as.Destroy.impl.Op.decl), @Wrap.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Wrap.as.Destroy.impl(constants.%T) [symbolic = @Wrap.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.a83)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -206,10 +152,6 @@ fn G() { // CHECK:STDOUT: %int_100: Core.IntLiteral = int_value 100 [concrete = constants.%int_100] // CHECK:STDOUT: %array_type: type = array_type %int_100, %i32 [concrete = constants.%array_type] // CHECK:STDOUT: %.loc19: %C.elem = field_decl arr, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.arr.5f2 [concrete = constants.%complete_type.22a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -239,19 +181,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Wrap.as.Destroy.impl.Op(@Wrap.%T.loc15_12.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %Wrap: type = class_type @Wrap, @Wrap(%T) [symbolic = %Wrap (constants.%Wrap.af6)] -// CHECK:STDOUT: %ptr: type = ptr_type %Wrap [symbolic = %ptr (constants.%ptr.b45)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.3b2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Wrap.as.Destroy.impl.Op.%ptr (%ptr.b45)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -303,26 +232,32 @@ fn G() { // CHECK:STDOUT: %.loc24_21: %Wrap.Make.type.708 = specific_constant @Wrap.%Wrap.Make.decl, @Wrap(constants.%C) [concrete = constants.%Wrap.Make.e4b] // CHECK:STDOUT: %Make.ref.loc24: %Wrap.Make.type.708 = name_ref Make, %.loc24_21 [concrete = constants.%Wrap.Make.e4b] // CHECK:STDOUT: %Wrap.Make.specific_fn.loc24: = specific_function %Make.ref.loc24, @Wrap.Make(constants.%C) [concrete = constants.%Wrap.Make.specific_fn.834] -// CHECK:STDOUT: %.loc24_3: ref %C = splice_block %c.var {} -// CHECK:STDOUT: %Wrap.Make.call.loc24: init %C = call %Wrap.Make.specific_fn.loc24() to %.loc24_3 +// CHECK:STDOUT: %.loc24_3.1: ref %C = splice_block %c.var {} +// CHECK:STDOUT: %Wrap.Make.call.loc24: init %C = call %Wrap.Make.specific_fn.loc24() to %.loc24_3.1 // CHECK:STDOUT: assign %c.var, %Wrap.Make.call.loc24 // CHECK:STDOUT: %C.ref.loc24_10: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc24: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %.loc24_3.2: %type_where = converted constants.%C, %facet_value.loc24 [concrete = constants.%facet_value.be8] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc24: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.be8) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.003] +// CHECK:STDOUT: %bound_method.loc24: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc24: %ptr.019 = addr_of %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr.loc24) -// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%empty_tuple.type, () [concrete = constants.%facet_value] -// CHECK:STDOUT: %.loc23_3: %type_where = converted constants.%empty_tuple.type, %facet_value [concrete = constants.%facet_value] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.c00 -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.c00, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc23: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc24: init %empty_tuple.type = call %bound_method.loc24(%addr.loc24) +// CHECK:STDOUT: %facet_value.loc23: %type_where = facet_value constants.%empty_tuple.type, () [concrete = constants.%facet_value.ff9] +// CHECK:STDOUT: %.loc23_3: %type_where = converted constants.%empty_tuple.type, %facet_value.loc23 [concrete = constants.%facet_value.ff9] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc23: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.c00 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.c00, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.ff9) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.a54] +// CHECK:STDOUT: %bound_method.loc23: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc23: %ptr.843 = addr_of %b.var -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc23(%addr.loc23) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc22: = bound_method %a.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc23: init %empty_tuple.type = call %bound_method.loc23(%addr.loc23) +// CHECK:STDOUT: %facet_value.loc22: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %.loc22_3: %type_where = converted constants.%i32, %facet_value.loc22 [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc22: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d23) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0] +// CHECK:STDOUT: %bound_method.loc22: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc22: %ptr.235 = addr_of %a.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -345,19 +280,6 @@ fn G() { // CHECK:STDOUT: %Wrap.Make.specific_fn.loc16_27.2 => constants.%Wrap.Make.specific_fn.bf1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Wrap.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Wrap => constants.%Wrap.af6 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.a83 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Wrap.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %Wrap => constants.%Wrap.af6 -// CHECK:STDOUT: %ptr => constants.%ptr.b45 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3b2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Wrap(constants.%i32) { // CHECK:STDOUT: %T.loc15_12.1 => constants.%i32 // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/call_basic_depth.carbon b/toolchain/check/testdata/generic/call_basic_depth.carbon index 325eb447c124..6b0c69e97428 100644 --- a/toolchain/check/testdata/generic/call_basic_depth.carbon +++ b/toolchain/check/testdata/generic/call_basic_depth.carbon @@ -57,7 +57,7 @@ fn M() { // 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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -186,7 +186,7 @@ fn M() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%C) { @@ -194,7 +194,7 @@ fn M() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: %H.specific_fn.loc31_3.2 => constants.%H.specific_fn.e3f // CHECK:STDOUT: %F.specific_fn.loc32_3.2 => constants.%F.specific_fn.04a // CHECK:STDOUT: %C.Cfn.specific_fn.loc36_4.2 => constants.%C.Cfn.specific_fn.26d @@ -205,7 +205,7 @@ fn M() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: %F.specific_fn.loc25_3.2 => constants.%F.specific_fn.04a // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/complete_type.carbon b/toolchain/check/testdata/generic/complete_type.carbon index 3bcdf451dca9..7f78a94307ad 100644 --- a/toolchain/check/testdata/generic/complete_type.carbon +++ b/toolchain/check/testdata/generic/complete_type.carbon @@ -95,13 +95,6 @@ fn G() { F(B); } // CHECK:STDOUT: %A.130: type = class_type @A, @A(%T) [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %A.elem.1ce: type = unbound_element_type %A.130, %T [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e00: = impl_witness @A.%Destroy.impl_witness_table, @A.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.ca9: type = ptr_type %A.130 [symbolic] -// CHECK:STDOUT: %pattern_type.09b: type = pattern_type %ptr.ca9 [symbolic] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op, @A.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.v.ff1: type = struct_type {.v: %T} [symbolic] // CHECK:STDOUT: %complete_type.460: = complete_type_witness %struct_type.v.ff1 [symbolic] // CHECK:STDOUT: %A.1d4: type = class_type @A, @A(%B) [concrete] @@ -111,22 +104,15 @@ fn G() { F(B); } // CHECK:STDOUT: %A.elem.4ce: type = unbound_element_type %A.1d4, %B [concrete] // CHECK:STDOUT: %struct_type.v.d45: type = struct_type {.v: %B} [concrete] // CHECK:STDOUT: %complete_type.1df: = complete_type_witness %struct_type.v.d45 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = 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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -159,56 +145,7 @@ fn G() { F(B); } // CHECK:STDOUT: %B.decl.loc29: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @A.as.Destroy.impl(@A.%T.loc6_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %A: type = class_type @A, @A(%T) [symbolic = %A (constants.%A.130)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.%Destroy.impl_witness_table, @A.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.e00)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op, @A.as.Destroy.impl(%T) [symbolic = %A.as.Destroy.impl.Op.type (constants.%A.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: @A.as.Destroy.impl.%A.as.Destroy.impl.Op.type (%A.as.Destroy.impl.Op.type) = struct_value () [symbolic = %A.as.Destroy.impl.Op (constants.%A.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: @A.as.Destroy.impl.%A.as.Destroy.impl.Op.type (%A.as.Destroy.impl.Op.type) = fn_decl @A.as.Destroy.impl.Op [symbolic = @A.as.Destroy.impl.%A.as.Destroy.impl.Op (constants.%A.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @A.as.Destroy.impl.Op.%pattern_type (%pattern_type.09b) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @A.as.Destroy.impl.Op.%pattern_type (%pattern_type.09b) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @A.as.Destroy.impl.Op.%ptr (%ptr.ca9) = value_param call_param0 -// CHECK:STDOUT: %.loc6_19.2: type = splice_block %Self.ref [symbolic = %A (constants.%A.130)] { -// CHECK:STDOUT: %.loc6_19.3: type = specific_constant constants.%A.130, @A(constants.%T) [symbolic = %A (constants.%A.130)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_19.3 [symbolic = %A (constants.%A.130)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @A.as.Destroy.impl.Op.%ptr (%ptr.ca9) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc29: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -229,10 +166,6 @@ fn G() { F(B); } // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6_9.2 [symbolic = %T.loc6_9.1 (constants.%T)] // CHECK:STDOUT: %.loc13: @A.%A.elem (%A.elem.1ce) = field_decl v, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A.130 [symbolic = @A.as.Destroy.impl.%A (constants.%A.130)] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @A.as.Destroy.impl(constants.%T) [symbolic = @A.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.e00)] // CHECK:STDOUT: %complete_type.loc14_1.1: = complete_type_witness constants.%struct_type.v.ff1 [symbolic = %complete_type.loc14_1.2 (constants.%complete_type.460)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc14_1.1 // CHECK:STDOUT: @@ -243,41 +176,15 @@ fn G() { F(B); } // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @A.as.Destroy.impl.Op(@A.%T.loc6_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %A: type = class_type @A, @A(%T) [symbolic = %A (constants.%A.130)] -// CHECK:STDOUT: %ptr: type = ptr_type %A [symbolic = %ptr (constants.%ptr.ca9)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.09b)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @A.as.Destroy.impl.Op.%ptr (%ptr.ca9)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%x.param: %A.1d4) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T) { // CHECK:STDOUT: %T.loc6_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @A.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %A => constants.%A.130 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.e00 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @A.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %A => constants.%A.130 -// CHECK:STDOUT: %ptr => constants.%ptr.ca9 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.09b -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%B) { // CHECK:STDOUT: %T.loc6_9.1 => constants.%B // CHECK:STDOUT: @@ -306,7 +213,6 @@ fn G() { F(B); } // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %PointeeT: type = bind_symbolic_name PointeeT, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.type.eb7d1c.1: type = fn_type @ptr.as.Destroy.impl.Op, @ptr.as.Destroy.impl(%PointeeT) [symbolic] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.60a6c7.1: %ptr.as.Destroy.impl.Op.type.eb7d1c.1 = struct_value () [symbolic] @@ -320,14 +226,11 @@ fn G() { F(B); } // 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: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = 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: %ptr.e79: type = ptr_type %B [concrete] // CHECK:STDOUT: %complete_type.3bf: = complete_type_witness %ptr.e79 [concrete] +// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] // CHECK:STDOUT: %Destroy.impl_witness.40d: = impl_witness imports.%Destroy.impl_witness_table.1ab, @ptr.as.Destroy.impl(%B) [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.type.083: type = fn_type @ptr.as.Destroy.impl.Op, @ptr.as.Destroy.impl(%B) [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.4a5: %ptr.as.Destroy.impl.Op.type.083 = struct_value () [concrete] @@ -368,27 +271,7 @@ fn G() { F(B); } // CHECK:STDOUT: %B.decl.loc14: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc14: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -446,8 +329,6 @@ fn G() { F(B); } // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc6_6.1 => constants.%T // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/generic/dependent_param.carbon b/toolchain/check/testdata/generic/dependent_param.carbon index 389155376aa1..22de7eda6ef7 100644 --- a/toolchain/check/testdata/generic/dependent_param.carbon +++ b/toolchain/check/testdata/generic/dependent_param.carbon @@ -42,14 +42,7 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %Inner.38e: type = class_type @Inner, @Inner(%T.be8, %U.afe) [symbolic] // CHECK:STDOUT: %Inner.Get.type.31a: type = fn_type @Inner.Get, @Inner(%T.be8, %U.afe) [symbolic] // CHECK:STDOUT: %Inner.Get.ce1: %Inner.Get.type.31a = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.20a: = impl_witness @Inner.%Destroy.impl_witness_table, @Inner.as.Destroy.impl(%T.be8, %U.afe) [symbolic] // CHECK:STDOUT: %require_complete.07c: = require_complete_type %T.as_type [symbolic] -// CHECK:STDOUT: %ptr.4e0: type = ptr_type %Inner.38e [symbolic] -// CHECK:STDOUT: %pattern_type.727: type = pattern_type %ptr.4e0 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.58f: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%T.be8) [symbolic] -// CHECK:STDOUT: %ptr.942: type = ptr_type %Outer.117 [symbolic] -// CHECK:STDOUT: %pattern_type.0fd: type = pattern_type %ptr.942 [symbolic] // CHECK:STDOUT: %Copy.Op.type: type = fn_type @Copy.Op [concrete] // CHECK:STDOUT: %Copy.lookup_impl_witness.e15: = lookup_impl_witness %T.be8, @Copy [symbolic] // CHECK:STDOUT: %.427: type = fn_type_with_self_type %Copy.Op.type, %T.be8 [symbolic] @@ -121,36 +114,6 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %n: ref %i32 = bind_name n, %n.var [concrete = %n.var] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Inner.as.Destroy.impl(@Outer.%T.loc4_13.2: %Copy.type, @Inner.%U.loc5_15.2: @Inner.%T.as_type.loc5_19.1 (%T.as_type)) { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Inner.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Inner.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Inner.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Outer.as.Destroy.impl(@Outer.%T.loc4_13.2: %Copy.type) { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.2: %Copy.type) { // CHECK:STDOUT: // CHECK:STDOUT: @@ -174,7 +137,6 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.Get.type: type = fn_type @Inner.Get, @Inner(%T, %U.loc5_15.1) [symbolic = %Inner.Get.type (constants.%Inner.Get.type.31a)] // CHECK:STDOUT: %Inner.Get: @Inner.%Inner.Get.type (%Inner.Get.type.31a) = struct_value () [symbolic = %Inner.Get (constants.%Inner.Get.ce1)] -// CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.Get.decl: @Inner.%Inner.Get.type (%Inner.Get.type.31a) = fn_decl @Inner.Get [symbolic = @Inner.%Inner.Get (constants.%Inner.Get.ce1)] { @@ -204,8 +166,8 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc7_17.1 [symbolic = %pattern_type (constants.%pattern_type.965801.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %U: @Inner.Get.%T.as_type.loc7_17.1 (%T.as_type) = bind_symbolic_name U, 1 [symbolic = %U (constants.%U.afe)] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc7_17.1 [symbolic = %require_complete (constants.%require_complete.07c)] +// CHECK:STDOUT: %U: @Inner.Get.%T.as_type.loc7_17.1 (%T.as_type) = bind_symbolic_name U, 1 [symbolic = %U (constants.%U.afe)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %T, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.e15)] // CHECK:STDOUT: %.loc7_28.2: type = fn_type_with_self_type constants.%Copy.Op.type, %T [symbolic = %.loc7_28.2 (constants.%.427)] // CHECK:STDOUT: %impl.elem0.loc7_28.2: @Inner.Get.%.loc7_28.2 (%.427) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_28.2 (constants.%impl.elem0.168)] @@ -226,22 +188,6 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Inner.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: %Copy.type, @Inner.%U.loc5_15.2: @Inner.%T.as_type.loc5_19.1 (%T.as_type)) { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Inner.as.Destroy.impl.Op.%ptr (%ptr.4e0)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Outer.as.Destroy.impl.Op(@Outer.%T.loc4_13.2: %Copy.type) { -// CHECK:STDOUT: -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.942)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Outer.ref: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] @@ -288,7 +234,6 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.Get.type => constants.%Inner.Get.type.31a // CHECK:STDOUT: %Inner.Get => constants.%Inner.Get.ce1 -// CHECK:STDOUT: %require_complete => constants.%require_complete.07c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner.Get(constants.%T.be8, constants.%U.afe) { @@ -297,36 +242,6 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %pattern_type => constants.%pattern_type.965801.1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl(constants.%T.be8, constants.%U.afe) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %T.as_type => constants.%T.as_type -// CHECK:STDOUT: %U => constants.%U.afe -// CHECK:STDOUT: %Inner => constants.%Inner.38e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.20a -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Inner.as.Destroy.impl.Op(constants.%T.be8, constants.%U.afe) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %T.as_type => constants.%T.as_type -// CHECK:STDOUT: %U => constants.%U.afe -// CHECK:STDOUT: %Inner => constants.%Inner.38e -// CHECK:STDOUT: %ptr => constants.%ptr.4e0 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.727 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Outer => constants.%Outer.117 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.58f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl.Op(constants.%T.be8) { -// CHECK:STDOUT: %T => constants.%T.be8 -// CHECK:STDOUT: %Outer => constants.%Outer.117 -// CHECK:STDOUT: %ptr => constants.%ptr.942 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.0fd -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%Copy.facet.c49) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%Copy.facet.c49 // CHECK:STDOUT: @@ -344,7 +259,6 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.Get.type => constants.%Inner.Get.type.888 // CHECK:STDOUT: %Inner.Get => constants.%Inner.Get.436 -// CHECK:STDOUT: %require_complete => constants.%complete_type.f8a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner.Get(constants.%Copy.facet.c49, constants.%int_42.c68) { @@ -353,8 +267,8 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %U => constants.%int_42.c68 // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a +// CHECK:STDOUT: %U => constants.%int_42.c68 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.impl_witness.a32 // CHECK:STDOUT: %.loc7_28.2 => constants.%.7fa // CHECK:STDOUT: %impl.elem0.loc7_28.2 => constants.%Int.as.Copy.impl.Op.f59 diff --git a/toolchain/check/testdata/generic/local.carbon b/toolchain/check/testdata/generic/local.carbon index aa0f2b05779c..ad704b09335d 100644 --- a/toolchain/check/testdata/generic/local.carbon +++ b/toolchain/check/testdata/generic/local.carbon @@ -62,13 +62,6 @@ class C(C:! type) { // CHECK:STDOUT: %C.f06: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %C.elem.cca: type = unbound_element_type %C.f06, %T [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d8c: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.18b: type = ptr_type %C.f06 [symbolic] -// CHECK:STDOUT: %pattern_type.468: type = pattern_type %ptr.18b [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.296: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.42a: %C.as.Destroy.impl.Op.type.296 = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x.2ac [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -101,27 +94,28 @@ class C(C:! type) { // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %C.val: %C.d45 = struct_value (%int_1.5d2) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.fbc: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%i32) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.752: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%i32) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.1bd: %C.as.Destroy.impl.Op.type.752 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C.d45, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.782: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b6b: %AggregateT.as_type.as.Destroy.impl.Op.type.782 = struct_value () [concrete] // CHECK:STDOUT: %ptr.9c7: type = ptr_type %C.d45 [concrete] -// CHECK:STDOUT: %pattern_type.3f3: type = pattern_type %ptr.9c7 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function %C.as.Destroy.impl.Op.1bd, @C.as.Destroy.impl.Op(%i32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b6b, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -133,35 +127,6 @@ class C(C:! type) { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc5_11.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f06)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.d8c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.296)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.296) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.42a)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.296) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.42a)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.468) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.468) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_21.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.18b) = value_param call_param0 -// CHECK:STDOUT: %.loc5_21.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f06)] { -// CHECK:STDOUT: %.loc5_21.3: type = specific_constant constants.%C.f06, @C(constants.%T) [symbolic = %C (constants.%C.f06)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_21.3 [symbolic = %C (constants.%C.f06)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.18b) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc5_11.2: type) { // CHECK:STDOUT: %T.loc5_11.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_11.1 (constants.%T)] // CHECK:STDOUT: @@ -175,10 +140,6 @@ class C(C:! type) { // CHECK:STDOUT: class { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc5_11.2 [symbolic = %T.loc5_11.1 (constants.%T)] // CHECK:STDOUT: %.loc6: @C.%C.elem (%C.elem.cca) = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f06 [symbolic = @C.as.Destroy.impl.%C (constants.%C.f06)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.d8c)] // CHECK:STDOUT: %complete_type.loc7_3.1: = complete_type_witness constants.%struct_type.x.2ac [symbolic = %complete_type.loc7_3.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc7_3.1 // CHECK:STDOUT: @@ -213,8 +174,8 @@ class C(C:! type) { // CHECK:STDOUT: %.loc8_26.3: ref %i32 = class_element_access %v.var, element0 // CHECK:STDOUT: %.loc8_26.4: init %i32 = initialize_from %.loc8_26.2 to %.loc8_26.3 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %.loc8_26.5: init %C.d45 = class_init (%.loc8_26.4), %v.var [concrete = constants.%C.val] -// CHECK:STDOUT: %.loc8_3: init %C.d45 = converted %.loc8_26.1, %.loc8_26.5 [concrete = constants.%C.val] -// CHECK:STDOUT: assign %v.var, %.loc8_3 +// CHECK:STDOUT: %.loc8_3.1: init %C.d45 = converted %.loc8_26.1, %.loc8_26.5 [concrete = constants.%C.val] +// CHECK:STDOUT: assign %v.var, %.loc8_3.1 // CHECK:STDOUT: %.loc8_15: type = splice_block %C [concrete = constants.%C.d45] { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, %C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -222,42 +183,20 @@ class C(C:! type) { // CHECK:STDOUT: %C: type = class_type @C, @C(constants.%i32) [concrete = constants.%C.d45] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %C.d45 = bind_name v, %v.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%C.as.Destroy.impl.Op.1bd -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function constants.%C.as.Destroy.impl.Op.1bd, @C.as.Destroy.impl.Op(constants.%i32) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_3: = bound_method %v.var, %C.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C.d45, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_3.2: %type_where = converted constants.%C.d45, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.b6b +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b6b, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc8_3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.9c7 = addr_of %v.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_3(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc5_11.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f06)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.18b)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.468)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.18b)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { // CHECK:STDOUT: %T.loc5_11.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f06 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.d8c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f06 -// CHECK:STDOUT: %ptr => constants.%ptr.18b -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.468 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%i32) { // CHECK:STDOUT: %T.loc5_11.1 => constants.%i32 // CHECK:STDOUT: @@ -269,23 +208,6 @@ class C(C:! type) { // CHECK:STDOUT: %complete_type.loc7_3.2 => constants.%complete_type.1ec // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%i32) { -// CHECK:STDOUT: %T => constants.%i32 -// CHECK:STDOUT: %C => constants.%C.d45 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.fbc -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.752 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.1bd -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%i32) { -// CHECK:STDOUT: %T => constants.%i32 -// CHECK:STDOUT: %C => constants.%C.d45 -// CHECK:STDOUT: %ptr => constants.%ptr.9c7 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3f3 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_param_shadows_class.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -294,28 +216,19 @@ class C(C:! type) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %C.8b3: type = bind_symbolic_name C, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f06: type = class_type @C, @C(%C.8b3) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%C.8b3) [symbolic] -// CHECK:STDOUT: %ptr.18b: type = ptr_type %C.f06 [symbolic] -// CHECK:STDOUT: %pattern_type.468: type = pattern_type %ptr.18b [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%C.8b3) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -327,45 +240,12 @@ class C(C:! type) { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%C.loc13_11.2: type) { -// CHECK:STDOUT: %C.loc13_21.1: type = bind_symbolic_name C, 0 [symbolic = %C.loc13_21.1 (constants.%C.8b3)] -// CHECK:STDOUT: %C.loc13_21.2: type = class_type @C, @C(%C.loc13_21.1) [symbolic = %C.loc13_21.2 (constants.%C.f06)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%C.loc13_21.1) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%C.loc13_21.1) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.468) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.468) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13_21.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.18b) = value_param call_param0 -// CHECK:STDOUT: %.loc13_21.2: type = splice_block %Self.ref [symbolic = %C.loc13_21.2 (constants.%C.f06)] { -// CHECK:STDOUT: %.loc13_21.3: type = specific_constant constants.%C.f06, @C(constants.%C.8b3) [symbolic = %C.loc13_21.2 (constants.%C.f06)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc13_21.3 [symbolic = %C.loc13_21.2 (constants.%C.f06)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.18b) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%C.loc13_11.2: type) { // CHECK:STDOUT: %C.loc13_11.1: type = bind_symbolic_name C, 0 [symbolic = %C.loc13_11.1 (constants.%C.8b3)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f06 [symbolic = @C.as.Destroy.impl.%C.loc13_21.2 (constants.%C.f06)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%C.8b3) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -377,7 +257,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.98f = symbolic_binding_pattern C, 0 [concrete] +// CHECK:STDOUT: %C.patt: %pattern_type = symbolic_binding_pattern C, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %C.loc13_11.2: type = bind_symbolic_name C, 0 [symbolic = %C.loc13_11.1 (constants.%C.8b3)] @@ -385,62 +265,29 @@ class C(C:! type) { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%C.loc13_11.2: type) { -// CHECK:STDOUT: %C.loc13_21.1: type = bind_symbolic_name C, 0 [symbolic = %C.loc13_21.1 (constants.%C.8b3)] -// CHECK:STDOUT: %C.loc13_21.2: type = class_type @C, @C(%C.loc13_21.1) [symbolic = %C.loc13_21.2 (constants.%C.f06)] -// CHECK:STDOUT: %ptr: type = ptr_type %C.loc13_21.2 [symbolic = %ptr (constants.%ptr.18b)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.468)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.18b)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%C.8b3) { // CHECK:STDOUT: %C.loc13_11.1 => constants.%C.8b3 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%C.8b3) { -// CHECK:STDOUT: %C.loc13_21.1 => constants.%C.8b3 -// CHECK:STDOUT: %C.loc13_21.2 => constants.%C.f06 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%C.8b3) { -// CHECK:STDOUT: %C.loc13_21.1 => constants.%C.8b3 -// CHECK:STDOUT: %C.loc13_21.2 => constants.%C.f06 -// CHECK:STDOUT: %ptr => constants.%ptr.18b -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.468 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- nonlocal_param_shadows_class.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %C.8b3: type = bind_symbolic_name C, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%C.8b3) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%C.8b3) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%C.8b3) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -450,52 +297,19 @@ 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.98f = symbolic_binding_pattern C, 0 [concrete] +// CHECK:STDOUT: %C.patt: %pattern_type = symbolic_binding_pattern C, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] // CHECK:STDOUT: %C.loc4_9.2: type = bind_symbolic_name C, 0 [symbolic = %C.loc4_9.1 (constants.%C.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%C.loc4_9.2: type) { -// CHECK:STDOUT: %C.loc4_19.1: type = bind_symbolic_name C, 0 [symbolic = %C.loc4_19.1 (constants.%C.8b3)] -// CHECK:STDOUT: %C.loc4_19.2: type = class_type @C, @C(%C.loc4_19.1) [symbolic = %C.loc4_19.2 (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%C.loc4_19.1) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%C.loc4_19.1) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc4_19.2: type = splice_block %Self.ref [symbolic = %C.loc4_19.2 (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc4_19.3: type = specific_constant constants.%C.f2e, @C(constants.%C.8b3) [symbolic = %C.loc4_19.2 (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_19.3 [symbolic = %C.loc4_19.2 (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%C.loc4_9.2: type) { // CHECK:STDOUT: %C.loc4_9.1: type = bind_symbolic_name C, 0 [symbolic = %C.loc4_9.1 (constants.%C.8b3)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C.loc4_19.2 (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%C.8b3) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -504,31 +318,7 @@ class C(C:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%C.loc4_9.2: type) { -// CHECK:STDOUT: %C.loc4_19.1: type = bind_symbolic_name C, 0 [symbolic = %C.loc4_19.1 (constants.%C.8b3)] -// CHECK:STDOUT: %C.loc4_19.2: type = class_type @C, @C(%C.loc4_19.1) [symbolic = %C.loc4_19.2 (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C.loc4_19.2 [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%C.8b3) { // CHECK:STDOUT: %C.loc4_9.1 => constants.%C.8b3 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%C.8b3) { -// CHECK:STDOUT: %C.loc4_19.1 => constants.%C.8b3 -// CHECK:STDOUT: %C.loc4_19.2 => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%C.8b3) { -// CHECK:STDOUT: %C.loc4_19.1 => constants.%C.8b3 -// CHECK:STDOUT: %C.loc4_19.2 => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/template/convert.carbon b/toolchain/check/testdata/generic/template/convert.carbon index 0e269d8edd63..be833d287164 100644 --- a/toolchain/check/testdata/generic/template/convert.carbon +++ b/toolchain/check/testdata/generic/template/convert.carbon @@ -104,13 +104,6 @@ fn Test(d: D) -> i32 { // 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.d14 = facet_value %C, (%ImplicitAs.impl_witness.f19) [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %Test2.type: type = fn_type @Test2 [concrete] @@ -142,7 +135,6 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -151,7 +143,6 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -235,22 +226,6 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: witness = @C.%ImplicitAs.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -265,10 +240,6 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.impl_witness_table = impl_witness_table (@C.as.ImplicitAs.impl.%C.as.ImplicitAs.impl.Convert.decl), @C.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness: = impl_witness %ImplicitAs.impl_witness_table [concrete = constants.%ImplicitAs.impl_witness.f19] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -332,8 +303,6 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Test2(%c.param: %C) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -396,13 +365,6 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = 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: %pattern_type.510: type = pattern_type %D [concrete] @@ -425,7 +387,6 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -434,7 +395,6 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -480,27 +440,7 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -540,8 +480,6 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Test(%d.param: %D) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] diff --git a/toolchain/check/testdata/generic/template/member_access.carbon b/toolchain/check/testdata/generic/template/member_access.carbon index 9a25abe40ab4..c28760cacced 100644 --- a/toolchain/check/testdata/generic/template/member_access.carbon +++ b/toolchain/check/testdata/generic/template/member_access.carbon @@ -114,13 +114,6 @@ fn Test(e: E) { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] @@ -161,7 +154,6 @@ fn Test(e: E) { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -169,7 +161,6 @@ fn Test(e: E) { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -223,30 +214,10 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc10: %C.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -290,8 +261,6 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Test1(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -368,13 +337,6 @@ fn Test(e: E) { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %D.elem: type = unbound_element_type %D, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.m: type = struct_type {.m: %i32} [concrete] // CHECK:STDOUT: %complete_type.218: = complete_type_witness %struct_type.m [concrete] // CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] @@ -396,7 +358,6 @@ fn Test(e: E) { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -404,7 +365,6 @@ fn Test(e: E) { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -443,30 +403,10 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @D { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc13: %D.elem = field_decl m, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.m [concrete = constants.%complete_type.218] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -511,8 +451,6 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Test(%d.param: %D) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -568,21 +506,9 @@ fn Test(e: E) { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %E: type = class_type @E [concrete] // CHECK:STDOUT: %F.a8a: type = class_type @F.loc16 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.03a: = impl_witness @F.loc16.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.01c: type = ptr_type %F.a8a [concrete] -// CHECK:STDOUT: %pattern_type.463: type = pattern_type %ptr.01c [concrete] -// CHECK:STDOUT: %F.as.Destroy.impl.Op.type: type = fn_type @F.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %F.as.Destroy.impl.Op: %F.as.Destroy.impl.Op.type = 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: %E.elem: type = unbound_element_type %E, %F.a8a [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.2c6: = impl_witness @E.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.742: type = ptr_type %E [concrete] -// CHECK:STDOUT: %pattern_type.88c: type = pattern_type %ptr.742 [concrete] -// CHECK:STDOUT: %E.as.Destroy.impl.Op.type: type = fn_type @E.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %E.as.Destroy.impl.Op: %E.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n.e4c: type = struct_type {.n: %F.a8a} [concrete] // CHECK:STDOUT: %complete_type.5ba: = complete_type_witness %struct_type.n.e4c [concrete] // CHECK:STDOUT: %pattern_type.a4a: type = pattern_type %E [concrete] @@ -612,7 +538,6 @@ fn Test(e: E) { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Copy = %Core.Copy -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -621,7 +546,6 @@ fn Test(e: E) { // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.as.Copy.impl [concrete] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -661,46 +585,10 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @F.as.Destroy.impl: @F.loc16.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %F.as.Destroy.impl.Op.decl: %F.as.Destroy.impl.Op.type = fn_decl @F.as.Destroy.impl.Op [concrete = constants.%F.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.463 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.463 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.01c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%F.a8a [concrete = constants.%F.a8a] -// CHECK:STDOUT: %self: %ptr.01c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %F.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @F.loc16.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @E.as.Destroy.impl: @E.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %E.as.Destroy.impl.Op.decl: %E.as.Destroy.impl.Op.type = fn_decl @E.as.Destroy.impl.Op [concrete = constants.%E.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.88c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.88c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.742 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] -// CHECK:STDOUT: %self: %ptr.742 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %E.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @E.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @E { // CHECK:STDOUT: %F.decl: type = class_decl @F.loc16 [concrete = constants.%F.a8a] {} {} // CHECK:STDOUT: %F.ref: type = name_ref F, %F.decl [concrete = constants.%F.a8a] // CHECK:STDOUT: %.loc17: %E.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] -// CHECK:STDOUT: impl_decl @E.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@E.as.Destroy.impl.%E.as.Destroy.impl.Op.decl), @E.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.2c6] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n.e4c [concrete = constants.%complete_type.5ba] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -711,10 +599,6 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @F.loc16 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%F.a8a [concrete = constants.%F.a8a] -// CHECK:STDOUT: impl_decl @F.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@F.as.Destroy.impl.%F.as.Destroy.impl.Op.decl), @F.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.03a] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -757,10 +641,6 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F.as.Destroy.impl.Op(%self.param: %ptr.01c) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @E.as.Destroy.impl.Op(%self.param: %ptr.742) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Test(%e.param: %E) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F.c41] diff --git a/toolchain/check/testdata/generic/template/unimplemented.carbon b/toolchain/check/testdata/generic/template/unimplemented.carbon index 141ace05fe0f..882d337f8c90 100644 --- a/toolchain/check/testdata/generic/template/unimplemented.carbon +++ b/toolchain/check/testdata/generic/template/unimplemented.carbon @@ -161,13 +161,6 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %type: type = facet_type [concrete] @@ -185,13 +178,11 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .MulWith = %Core.MulWith // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/types/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.MulWith: %MulWith.type.8b4 = import_ref Core//prelude/operators/arithmetic, MulWith, loaded [concrete = constants.%MulWith.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -220,30 +211,10 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: %C.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -252,8 +223,6 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: .n = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%c.loc11_15.2: %C) { // CHECK:STDOUT: %c.loc11_15.1: %C = bind_symbolic_name c, 0, template [template = %c.loc11_15.1 (constants.%c)] // CHECK:STDOUT: @@ -301,10 +270,12 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: %Copy.impl_witness.dc4: = impl_witness imports.%Copy.impl_witness_table.965, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %i32, (%Copy.impl_witness.dc4) [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.a2f397.2: = lookup_impl_witness %T.9ff, @Destroy [template] // CHECK:STDOUT: %.8eb584.2: type = fn_type_with_self_type %Destroy.Op.type, %T.9ff [template] // CHECK:STDOUT: %impl.elem0.b2e868.2: %.8eb584.2 = impl_witness_access %Destroy.lookup_impl_witness.a2f397.2, element0 [template] @@ -407,11 +378,13 @@ fn F[template T:! Core.Destroy](x: T) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %w: ref %i32 = bind_name w, %w.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %w.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc22: = bound_method %w.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc22_3.4: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %w.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc22: = bound_method %w.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc22: %ptr.235 = addr_of %w.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22) // CHECK:STDOUT: %impl.elem0.loc14_3.1: @F.%.loc14_3.6 (%.8eb584.2) = impl_witness_access constants.%Destroy.lookup_impl_witness.a2f397.2, element0 [template = %impl.elem0.loc14_3.2 (constants.%impl.elem0.b2e868.2)] // CHECK:STDOUT: %bound_method.loc14_3.1: = bound_method %v.var, %impl.elem0.loc14_3.1 // CHECK:STDOUT: %specific_impl_fn.loc14_3.1: = specific_impl_function %impl.elem0.loc14_3.1, @Destroy.Op(constants.%T.9ff) [template = %specific_impl_fn.loc14_3.2 (constants.%specific_impl_fn.b6bc42.2)] diff --git a/toolchain/check/testdata/if_expr/constant_condition.carbon b/toolchain/check/testdata/if_expr/constant_condition.carbon index 650cb85867f4..111c03fd6e4b 100644 --- a/toolchain/check/testdata/if_expr/constant_condition.carbon +++ b/toolchain/check/testdata/if_expr/constant_condition.carbon @@ -101,13 +101,15 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %.9e2: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.7d5 [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: = specific_function %ptr.as.Copy.impl.Op.9fb, @ptr.as.Copy.impl.Op(%i32) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.type.142: type = fn_type @ptr.as.Destroy.impl.Op, @ptr.as.Destroy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.c04: %ptr.as.Destroy.impl.Op.type.142 = struct_value () [concrete] // CHECK:STDOUT: %ptr.5d5: type = ptr_type %ptr.235 [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.specific_fn: = specific_function %ptr.as.Destroy.impl.Op.c04, @ptr.as.Destroy.impl.Op(%i32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: %PartiallyConstant.type: type = fn_type @PartiallyConstant [concrete] // CHECK:STDOUT: %PartiallyConstant: %PartiallyConstant.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -299,8 +301,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %specific_fn.loc27: = specific_function %impl.elem0.loc27, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc27_3.2: = bound_method %int_1, %specific_fn.loc27 [concrete = constants.%bound_method.c11] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc27_3.2(%int_1) [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: %.loc27_3: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: assign %v.var, %.loc27_3 +// CHECK:STDOUT: %.loc27_3.1: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.5d2] +// CHECK:STDOUT: assign %v.var, %.loc27_3.1 // CHECK:STDOUT: br !.loc27_13 // CHECK:STDOUT: // CHECK:STDOUT: !.loc27_13: @@ -374,11 +376,13 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %bound_method.loc28_3: = bound_method %w.var, %ptr.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc28_3: %ptr.5d5 = addr_of %w.var // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc28_3(%addr.loc28_3) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc27_3.3: = bound_method %v.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc27_3.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc27_3.3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc27: %ptr.235 = addr_of %v.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc27_3.3(%addr.loc27) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc27_3.3(%addr.loc27) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -395,8 +399,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %specific_fn.loc33: = specific_function %impl.elem0.loc33, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc33_3.2: = bound_method %int_1, %specific_fn.loc33 [concrete = constants.%bound_method.c11] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc33_3.2(%int_1) [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: %.loc33_3: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: assign %v.var, %.loc33_3 +// CHECK:STDOUT: %.loc33_3.1: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.5d2] +// CHECK:STDOUT: assign %v.var, %.loc33_3.1 // CHECK:STDOUT: br !.loc33_13 // CHECK:STDOUT: // CHECK:STDOUT: !.loc33_13: @@ -467,11 +471,13 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %bound_method.loc34_3: = bound_method %w.var, %ptr.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc34_3: %ptr.5d5 = addr_of %w.var // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc34_3(%addr.loc34_3) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc33_3.3: = bound_method %v.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc33_3.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc33_3.3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc33: %ptr.235 = addr_of %v.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc33_3.3(%addr.loc33) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc33_3.3(%addr.loc33) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: 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 1c1e0768fa0c..d4ca3c3c6f31 100644 --- a/toolchain/check/testdata/if_expr/fail_not_in_function.carbon +++ b/toolchain/check/testdata/if_expr/fail_not_in_function.carbon @@ -124,58 +124,18 @@ fn F() { // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %B: type = class_type @B [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(.inst20.loc4_14: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_24.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc4_24.2: type = splice_block %Self.ref [symbolic = %C (constants.%C)] { -// CHECK:STDOUT: %.loc4_24.3: type = specific_constant constants.%C, @C(constants.%T) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_24.3 [symbolic = %C (constants.%C)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(.inst20.loc4_14: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [symbolic = @C.as.Destroy.impl.%C (constants.%C)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -195,33 +155,9 @@ fn F() { // CHECK:STDOUT: .C = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(.inst20.loc4_14: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(); // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/assoc_const_self.carbon b/toolchain/check/testdata/impl/assoc_const_self.carbon index 01c7e4f07826..ebaee8ec3741 100644 --- a/toolchain/check/testdata/impl/assoc_const_self.carbon +++ b/toolchain/check/testdata/impl/assoc_const_self.carbon @@ -386,16 +386,9 @@ fn CallF() { // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0.2ca: %I.assoc_type = assoc_entity element0, @I.%V [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.396: type = facet_type <@ImplicitAs, @ImplicitAs(%C)> [concrete] @@ -422,12 +415,10 @@ fn CallF() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -499,22 +490,6 @@ fn CallF() { // CHECK:STDOUT: assoc_const V:! @V.%Self.as_type (%Self.as_type.a67); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.cb1 = binding_pattern self [concrete] @@ -545,10 +520,6 @@ fn CallF() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -556,8 +527,6 @@ fn CallF() { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @empty_tuple.type.as.ImplicitAs.impl.Convert(%self.param: %empty_tuple.type) -> %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc11_41.1: %empty_struct_type = struct_literal () diff --git a/toolchain/check/testdata/impl/extend_impl_generic.carbon b/toolchain/check/testdata/impl/extend_impl_generic.carbon index 003f0904f2f5..1ae5774263cf 100644 --- a/toolchain/check/testdata/impl/extend_impl_generic.carbon +++ b/toolchain/check/testdata/impl/extend_impl_generic.carbon @@ -75,13 +75,6 @@ class X(U:! type) { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Param.elem: type = unbound_element_type %Param, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.31d: = impl_witness @Param.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.756: type = ptr_type %Param [concrete] -// CHECK:STDOUT: %pattern_type.fae: type = pattern_type %ptr.756 [concrete] -// CHECK:STDOUT: %Param.as.Destroy.impl.Op.type: type = fn_type @Param.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Param.as.Destroy.impl.Op: %Param.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.x.ed6: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x.ed6 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -96,11 +89,6 @@ class X(U:! type) { // 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.aca = facet_value %C, (%HasF.impl_witness) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] @@ -137,29 +125,37 @@ class X(U:! type) { // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %i32, (%Copy.impl_witness.a32) [concrete] // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.654: %type_where = facet_value %Param, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d91: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.654) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.934: %AggregateT.as_type.as.Destroy.impl.Op.type.d91 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.756: type = ptr_type %Param [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.24c: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.934, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.654) [concrete] +// CHECK:STDOUT: %facet_value.d23: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d23) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d23) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -221,22 +217,6 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Param.as.Destroy.impl: @Param.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Param.as.Destroy.impl.Op.decl: %Param.as.Destroy.impl.Op.type = fn_decl @Param.as.Destroy.impl.Op [concrete = constants.%Param.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.fae = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.fae = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.756 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Param [concrete = constants.%Param] -// CHECK:STDOUT: %self: %ptr.756 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Param.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Param.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.b01 = return_slot_pattern [concrete] @@ -253,30 +233,10 @@ class X(U:! type) { // CHECK:STDOUT: witness = @C.%HasF.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Param { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc9: %Param.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Param [concrete = constants.%Param] -// CHECK:STDOUT: impl_decl @Param.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Param.as.Destroy.impl.%Param.as.Destroy.impl.Op.decl), @Param.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.31d] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.x.ed6 [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -294,10 +254,6 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %HasF.impl_witness_table = impl_witness_table (@C.as.HasF.impl.%C.as.HasF.impl.F.decl), @C.as.HasF.impl [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness %HasF.impl_witness_table [concrete = constants.%HasF.impl_witness] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -316,8 +272,6 @@ class X(U:! type) { // CHECK:STDOUT: fn() -> @HasF.F.%T (%T.8b3); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Param.as.Destroy.impl.Op(%self.param: %ptr.756) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.HasF.impl.F() -> %return.param: %Param { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] @@ -335,8 +289,6 @@ class X(U:! type) { // CHECK:STDOUT: return %.loc15_22 to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @G(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -383,17 +335,27 @@ class X(U:! type) { // CHECK:STDOUT: %i32.loc22: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var -// CHECK:STDOUT: %Param.as.Destroy.impl.Op.bound.loc22: = bound_method %.loc22_20.2, constants.%Param.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc22_20: %type_where = facet_value constants.%Param, () [concrete = constants.%facet_value.654] +// CHECK:STDOUT: %.loc22_20.3: %type_where = converted constants.%Param, %facet_value.loc22_20 [concrete = constants.%facet_value.654] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc22_20: = bound_method %.loc22_20.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.934 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.934, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.654) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.24c] +// CHECK:STDOUT: %bound_method.loc22_20: = bound_method %.loc22_20.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc22_20: %ptr.756 = addr_of %.loc22_20.2 -// CHECK:STDOUT: %Param.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %Param.as.Destroy.impl.Op.bound.loc22(%addr.loc22_20) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc22_3: = bound_method %b.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc22_20: init %empty_tuple.type = call %bound_method.loc22_20(%addr.loc22_20) +// CHECK:STDOUT: %facet_value.loc22_3: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %.loc22_3: %type_where = converted constants.%i32, %facet_value.loc22_3 [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc22_3: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d23) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0] +// CHECK:STDOUT: %bound_method.loc22_3: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc22_3: %ptr.235 = addr_of %b.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc22_3(%addr.loc22_3) -// CHECK:STDOUT: %Param.as.Destroy.impl.Op.bound.loc21: = bound_method %.loc21_20.2, constants.%Param.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc22_3: init %empty_tuple.type = call %bound_method.loc22_3(%addr.loc22_3) +// CHECK:STDOUT: %facet_value.loc21: %type_where = facet_value constants.%Param, () [concrete = constants.%facet_value.654] +// CHECK:STDOUT: %.loc21_20.3: %type_where = converted constants.%Param, %facet_value.loc21 [concrete = constants.%facet_value.654] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc21: = bound_method %.loc21_20.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.934 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.934, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.654) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.24c] +// CHECK:STDOUT: %bound_method.loc21: = bound_method %.loc21_20.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc21: %ptr.756 = addr_of %.loc21_20.2 -// CHECK:STDOUT: %Param.as.Destroy.impl.Op.call.loc21: init %empty_tuple.type = call %Param.as.Destroy.impl.Op.bound.loc21(%addr.loc21) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc21: init %empty_tuple.type = call %bound_method.loc21(%addr.loc21) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -434,8 +396,8 @@ class X(U:! type) { // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.b13b9f.1: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.daeb23.1: %I.type.b13b9f.1 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Self.as_type.283: type = facet_access_type %Self.daeb23.1 [symbolic] -// CHECK:STDOUT: %pattern_type.a19: type = pattern_type %Self.as_type.283 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.daeb23.1 [symbolic] +// CHECK:STDOUT: %pattern_type.a19: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %I.F.type.2aef59.1: type = fn_type @I.F, @I(%T) [symbolic] // CHECK:STDOUT: %I.F.bb2dd4.1: %I.F.type.2aef59.1 = struct_value () [symbolic] @@ -458,13 +420,6 @@ class X(U:! type) { // 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.b13b9f.2 = facet_value %X, (%I.impl_witness) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @X.%Destroy.impl_witness_table, @X.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %ptr.428: type = ptr_type %X [symbolic] -// CHECK:STDOUT: %pattern_type.d72: type = pattern_type %ptr.428 [symbolic] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op, @X.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = 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: %require_complete.441: = require_complete_type %X [symbolic] @@ -473,11 +428,9 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -520,14 +473,14 @@ class X(U:! type) { // CHECK:STDOUT: %t.patt: @I.F.%pattern_type.loc5_20 (%pattern_type.7dcd0a.1) = binding_pattern t [concrete] // CHECK:STDOUT: %t.param_patt: @I.F.%pattern_type.loc5_20 (%pattern_type.7dcd0a.1) = value_param_pattern %t.patt, call_param1 [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc5_14.1 (%Self.as_type.283) = value_param call_param0 -// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.3 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.283)] { +// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.3 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { // CHECK:STDOUT: %.loc5_14.2: @I.F.%I.type (%I.type.b13b9f.1) = specific_constant @I.%Self.1, @I(constants.%T) [symbolic = %Self (constants.%Self.daeb23.1)] // CHECK:STDOUT: %Self.ref: @I.F.%I.type (%I.type.b13b9f.1) = name_ref Self, %.loc5_14.2 [symbolic = %Self (constants.%Self.daeb23.1)] -// CHECK:STDOUT: %Self.as_type.loc5_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.283)] -// CHECK:STDOUT: %.loc5_14.3: type = converted %Self.ref, %Self.as_type.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.283)] +// CHECK:STDOUT: %Self.as_type.loc5_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc5_14.3: type = converted %Self.ref, %Self.as_type.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc5_14.1 (%Self.as_type.283) = bind_name self, %self.param +// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc5_14.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: %t.param: @I.F.%T (%T) = value_param call_param1 // CHECK:STDOUT: %T.ref: type = name_ref T, @I.%T.loc4_13.2 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %t: @I.F.%T (%T) = bind_name t, %t.param @@ -579,35 +532,6 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @X.as.Destroy.impl(@X.%U.loc8_9.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %X: type = class_type @X, @X(%U) [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @X.%Destroy.impl_witness_table, @X.as.Destroy.impl(%U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op, @X.as.Destroy.impl(%U) [symbolic = %X.as.Destroy.impl.Op.type (constants.%X.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: @X.as.Destroy.impl.%X.as.Destroy.impl.Op.type (%X.as.Destroy.impl.Op.type) = struct_value () [symbolic = %X.as.Destroy.impl.Op (constants.%X.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @X.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %X.as.Destroy.impl.Op.decl: @X.as.Destroy.impl.%X.as.Destroy.impl.Op.type (%X.as.Destroy.impl.Op.type) = fn_decl @X.as.Destroy.impl.Op [symbolic = @X.as.Destroy.impl.%X.as.Destroy.impl.Op (constants.%X.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @X.as.Destroy.impl.Op.%pattern_type (%pattern_type.d72) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @X.as.Destroy.impl.Op.%pattern_type (%pattern_type.d72) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @X.as.Destroy.impl.Op.%ptr (%ptr.428) = value_param call_param0 -// CHECK:STDOUT: %.loc8_19.2: type = splice_block %Self.ref [symbolic = %X (constants.%X)] { -// CHECK:STDOUT: %.loc8_19.3: type = specific_constant constants.%X, @X(constants.%U) [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc8_19.3 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @X.as.Destroy.impl.Op.%ptr (%ptr.428) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %X.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @X.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @X(%U.loc8_9.2: type) { // CHECK:STDOUT: %U.loc8_9.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc8_9.1 (constants.%U)] // CHECK:STDOUT: @@ -625,10 +549,6 @@ class X(U:! type) { // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (@X.as.I.impl.%X.as.I.impl.F.decl), @X.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table, @X.as.I.impl(constants.%U) [symbolic = @X.as.I.impl.%I.impl_witness (constants.%I.impl_witness)] // CHECK:STDOUT: %.loc9: type = specific_constant @X.as.I.impl.%I.type.loc9_21.2, @X.as.I.impl(constants.%U) [symbolic = %I.type (constants.%I.type.b13b9f.2)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [symbolic = @X.as.Destroy.impl.%X (constants.%X)] -// CHECK:STDOUT: impl_decl @X.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@X.as.Destroy.impl.%X.as.Destroy.impl.Op.decl), @X.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @X.as.Destroy.impl(constants.%U) [symbolic = @X.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -644,11 +564,11 @@ class X(U:! type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.b13b9f.1)] // CHECK:STDOUT: %Self: @I.F.%I.type (%I.type.b13b9f.1) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.daeb23.1)] -// CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.283)] +// CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.loc5_8: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type.loc5_8 (constants.%pattern_type.a19)] // CHECK:STDOUT: %pattern_type.loc5_20: type = pattern_type %T [symbolic = %pattern_type.loc5_20 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc5_14.1 (%Self.as_type.283), %t.param: @I.F.%T (%T)); +// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc5_14.1 (%Self.as_type), %t.param: @I.F.%T (%T)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @X.as.I.impl.F(@X.%U.loc8_9.2: type) { @@ -669,17 +589,6 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @X.as.Destroy.impl.Op(@X.%U.loc8_9.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %X: type = class_type @X, @X(%U) [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %ptr: type = ptr_type %X [symbolic = %ptr (constants.%ptr.428)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d72)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @X.as.Destroy.impl.Op.%ptr (%ptr.428)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%T) { // CHECK:STDOUT: %T.loc4_13.1 => constants.%T // CHECK:STDOUT: } @@ -688,7 +597,7 @@ class X(U:! type) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %I.type => constants.%I.type.b13b9f.1 // CHECK:STDOUT: %Self => constants.%Self.daeb23.1 -// CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type.283 +// CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.a19 // CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } @@ -743,16 +652,3 @@ class X(U:! type) { // CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @X.as.Destroy.impl(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @X.as.Destroy.impl.Op(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %ptr => constants.%ptr.428 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d72 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_extend_impl_scope.carbon b/toolchain/check/testdata/impl/fail_extend_impl_scope.carbon index ad3c16ba455b..bc15d0215df9 100644 --- a/toolchain/check/testdata/impl/fail_extend_impl_scope.carbon +++ b/toolchain/check/testdata/impl/fail_extend_impl_scope.carbon @@ -180,19 +180,19 @@ fn F() { // 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: %Z.facet: %Z.type = facet_value %Point, (%Z.impl_witness) [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.8ce: = impl_witness @Point.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.536: type = ptr_type %Point [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %ptr.536 [concrete] -// CHECK:STDOUT: %Point.as.Destroy.impl.Op.type: type = fn_type @Point.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Point.as.Destroy.impl.Op: %Point.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Point.val: %Point = struct_value () [concrete] // CHECK:STDOUT: %.672: type = fn_type_with_self_type %Z.Zero.type, %Z.facet [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Point, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.e2d: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.51d: %AggregateT.as_type.as.Destroy.impl.Op.type.e2d = struct_value () [concrete] +// CHECK:STDOUT: %ptr.536: type = ptr_type %Point [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.51d, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -255,22 +255,6 @@ fn F() { // CHECK:STDOUT: witness = @Point.%Z.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Point.as.Destroy.impl: @Point.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Point.as.Destroy.impl.Op.decl: %Point.as.Destroy.impl.Op.type = fn_decl @Point.as.Destroy.impl.Op [concrete = constants.%Point.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.bbc = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.bbc = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.536 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point] -// CHECK:STDOUT: %self: %ptr.536 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Point.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Point.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Point { // CHECK:STDOUT: impl_decl @Point.as.Z.impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point] @@ -278,11 +262,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Z.impl_witness_table = impl_witness_table (@Point.as.Z.impl.%Point.as.Z.impl.Zero.decl), @Point.as.Z.impl [concrete] // CHECK:STDOUT: %Z.impl_witness: = impl_witness %Z.impl_witness_table [concrete = constants.%Z.impl_witness] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point] -// CHECK:STDOUT: impl_decl @Point.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Point.as.Destroy.impl.%Point.as.Destroy.impl.Op.decl), @Point.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.8ce] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -310,8 +290,6 @@ fn F() { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Point.as.Destroy.impl.Op(%self.param: %ptr.536) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc25_5.1: %empty_struct_type = struct_literal () @@ -323,9 +301,13 @@ fn F() { // CHECK:STDOUT: %Zero.ref: %Z.assoc_type = name_ref Zero, @Z.%assoc0 [concrete = constants.%assoc0.534] // CHECK:STDOUT: %impl.elem0: %.672 = impl_witness_access constants.%Z.impl_witness, element0 [concrete = constants.%Point.as.Z.impl.Zero] // CHECK:STDOUT: %Point.as.Z.impl.Zero.call: init %empty_tuple.type = call %impl.elem0() -// CHECK:STDOUT: %Point.as.Destroy.impl.Op.bound: = bound_method %.loc25_5.4, constants.%Point.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Point, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc25_5.5: %type_where = converted constants.%Point, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc25_5.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.51d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.51d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc25_5.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.536 = addr_of %.loc25_5.4 -// CHECK:STDOUT: %Point.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Point.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon b/toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon index 91ea6ede92ba..c8b7c4b4e0e4 100644 --- a/toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon +++ b/toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon @@ -52,47 +52,28 @@ class E { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [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: %I.impl_witness.943: = impl_witness @C.%I.impl_witness_table [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %D: type = class_type @D [concrete] // CHECK:STDOUT: %I.impl_witness.aed: = impl_witness @D.%I.impl_witness_table [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %E: type = class_type @E [concrete] // CHECK:STDOUT: %I.impl_witness.c8d: = impl_witness @E.%I.impl_witness_table [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.2c6: = impl_witness @E.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.742: type = ptr_type %E [concrete] -// CHECK:STDOUT: %pattern_type.88c: type = pattern_type %ptr.742 [concrete] -// CHECK:STDOUT: %E.as.Destroy.impl.Op.type: type = fn_type @E.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %E.as.Destroy.impl.Op: %E.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -111,7 +92,7 @@ class E { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self @@ -123,61 +104,13 @@ class E { // CHECK:STDOUT: witness = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.I.impl: %D.ref as %I.ref; // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc25: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @E.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = @E.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @E.as.Destroy.impl: @E.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %E.as.Destroy.impl.Op.decl: %E.as.Destroy.impl.Op.type = fn_decl @E.as.Destroy.impl.Op [concrete = constants.%E.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.88c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.88c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc36: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.742 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] -// CHECK:STDOUT: %self: %ptr.742 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %E.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @E.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: impl_decl @i32.as.I.impl [concrete] {} { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -186,10 +119,6 @@ class E { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @i32.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.943] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -206,10 +135,6 @@ class E { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @D.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.aed] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -227,10 +152,6 @@ class E { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @E.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.c8d] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] -// CHECK:STDOUT: impl_decl @E.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@E.as.Destroy.impl.%E.as.Destroy.impl.Op.decl), @E.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.2c6] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -240,9 +161,3 @@ class E { // CHECK:STDOUT: extend @E.as.I.impl.%I.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @E.as.Destroy.impl.Op(%self.param: %ptr.742) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_extend_non_interface.carbon b/toolchain/check/testdata/impl/fail_extend_non_interface.carbon index e84b762f0387..c2ad8af8899e 100644 --- a/toolchain/check/testdata/impl/fail_extend_non_interface.carbon +++ b/toolchain/check/testdata/impl/fail_extend_non_interface.carbon @@ -28,13 +28,6 @@ class C { // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: } @@ -42,12 +35,10 @@ class C { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -61,32 +52,12 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as..impl: %Self.ref as %i32; // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: impl_decl @C.as..impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -96,5 +67,3 @@ class C { // CHECK:STDOUT: has_error // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_impl_as_scope.carbon b/toolchain/check/testdata/impl/fail_impl_as_scope.carbon index ba4c8c5c3c6e..02ee55f57537 100644 --- a/toolchain/check/testdata/impl/fail_impl_as_scope.carbon +++ b/toolchain/check/testdata/impl/fail_impl_as_scope.carbon @@ -247,20 +247,20 @@ class X { // 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] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.8ce: = impl_witness @Point.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.536: type = ptr_type %Point [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %ptr.536 [concrete] -// CHECK:STDOUT: %Point.as.Destroy.impl.Op.type: type = fn_type @Point.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Point.as.Destroy.impl.Op: %Point.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %.1d8: type = fn_type_with_self_type %Z.Zero.type, %Z.facet [concrete] // CHECK:STDOUT: %Point.val: %Point = struct_value () [concrete] // CHECK:STDOUT: %.142: type = fn_type_with_self_type %Z.Method.type, %Z.facet [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %Point, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.e2d: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.51d: %AggregateT.as_type.as.Destroy.impl.Op.type.e2d = struct_value () [concrete] +// CHECK:STDOUT: %ptr.536: type = ptr_type %Point [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.51d, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -361,22 +361,6 @@ class X { // CHECK:STDOUT: witness = @Point.%Z.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Point.as.Destroy.impl: @Point.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Point.as.Destroy.impl.Op.decl: %Point.as.Destroy.impl.Op.type = fn_decl @Point.as.Destroy.impl.Op [concrete = constants.%Point.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.bbc = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.bbc = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.536 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point] -// CHECK:STDOUT: %self: %ptr.536 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Point.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Point.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Point { // CHECK:STDOUT: impl_decl @Point.as.Z.impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point] @@ -384,11 +368,7 @@ class X { // CHECK:STDOUT: } // CHECK:STDOUT: %Z.impl_witness_table = impl_witness_table (@Point.as.Z.impl.%Point.as.Z.impl.Zero.decl, @Point.as.Z.impl.%Point.as.Z.impl.Method.decl), @Point.as.Z.impl [concrete] // CHECK:STDOUT: %Z.impl_witness: = impl_witness %Z.impl_witness_table [concrete = constants.%Z.impl_witness] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point] -// CHECK:STDOUT: impl_decl @Point.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Point.as.Destroy.impl.%Point.as.Destroy.impl.Op.decl), @Point.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.8ce] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -441,8 +421,6 @@ class X { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Point.as.Destroy.impl.Op(%self.param: %ptr.536) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Point.ref.loc28: type = name_ref Point, file.%Point.decl [concrete = constants.%Point] @@ -461,12 +439,16 @@ class X { // CHECK:STDOUT: %Z.ref.loc29: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type] // CHECK:STDOUT: %Method.ref: %Z.assoc_type = name_ref Method, @Z.%assoc1 [concrete = constants.%assoc1] // CHECK:STDOUT: %impl.elem1: %.142 = impl_witness_access constants.%Z.impl_witness, element1 [concrete = constants.%Point.as.Z.impl.Method] -// CHECK:STDOUT: %bound_method: = bound_method %.loc29_7.1, %impl.elem1 +// CHECK:STDOUT: %bound_method.loc29_16: = bound_method %.loc29_7.1, %impl.elem1 // CHECK:STDOUT: %.loc29_7.2: %Point = bind_value %.loc29_7.1 -// CHECK:STDOUT: %Point.as.Z.impl.Method.call: init %empty_tuple.type = call %bound_method(%.loc29_7.2) -// CHECK:STDOUT: %Point.as.Destroy.impl.Op.bound: = bound_method %.loc29_5.4, constants.%Point.as.Destroy.impl.Op +// CHECK:STDOUT: %Point.as.Z.impl.Method.call: init %empty_tuple.type = call %bound_method.loc29_16(%.loc29_7.2) +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%Point, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc29_5.5: %type_where = converted constants.%Point, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc29_5.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.51d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.51d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc29_5: = bound_method %.loc29_5.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.536 = addr_of %.loc29_5.4 -// CHECK:STDOUT: %Point.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Point.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc29_5(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -522,24 +504,15 @@ class X { // CHECK:STDOUT: %X.as.A.impl.B.type: type = fn_type @X.as.A.impl.B [concrete] // CHECK:STDOUT: %X.as.A.impl.B: %X.as.A.impl.B.type = struct_value () [concrete] // CHECK:STDOUT: %A.facet: %A.type = facet_value %X, (%A.impl_witness) [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @X.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -594,22 +567,6 @@ class X { // CHECK:STDOUT: witness = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @X.as.Destroy.impl: @X.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %X.as.Destroy.impl.Op.decl: %X.as.Destroy.impl.Op.type = fn_decl @X.as.Destroy.impl.Op [concrete = constants.%X.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1c6 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1c6 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d17 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: %self: %ptr.d17 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %X.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @X.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @X { // CHECK:STDOUT: impl_decl @X.as.A.impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] @@ -617,10 +574,6 @@ class X { // CHECK:STDOUT: } // CHECK:STDOUT: %A.impl_witness_table = impl_witness_table (@X.as.A.impl.%X.as.A.impl.B.decl), @X.as.A.impl [concrete] // CHECK:STDOUT: %A.impl_witness: = impl_witness %A.impl_witness_table [concrete = constants.%A.impl_witness] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: impl_decl @X.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@X.as.Destroy.impl.%X.as.Destroy.impl.Op.decl), @X.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -647,8 +600,6 @@ class X { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @X.as.Destroy.impl.Op(%self.param: %ptr.d17) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @A.B(constants.%Self.0dd) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @A.B(constants.%A.facet) {} 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 5c4d6600fef6..026ae8f4db7a 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon @@ -252,32 +252,15 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %assoc0.82e: %I.assoc_type = assoc_entity element0, @I.%I.F.decl [concrete] // CHECK:STDOUT: %NoF: type = class_type @NoF [concrete] // CHECK:STDOUT: %I.impl_witness.6bf: = impl_witness @NoF.%I.impl_witness_table [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.69a: = impl_witness @NoF.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.0f9: type = ptr_type %NoF [concrete] -// CHECK:STDOUT: %pattern_type.7b5: type = pattern_type %ptr.0f9 [concrete] -// CHECK:STDOUT: %NoF.as.Destroy.impl.Op.type: type = fn_type @NoF.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %NoF.as.Destroy.impl.Op: %NoF.as.Destroy.impl.Op.type = 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: %FNotFunction: type = class_type @FNotFunction [concrete] // CHECK:STDOUT: %I.impl_witness.aac: = impl_witness @FNotFunction.%I.impl_witness_table [concrete] // CHECK:STDOUT: %F: type = class_type @F [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.bf9: = impl_witness @FNotFunction.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.2b2: type = ptr_type %FNotFunction [concrete] -// CHECK:STDOUT: %pattern_type.27c: type = pattern_type %ptr.2b2 [concrete] -// CHECK:STDOUT: %FNotFunction.as.Destroy.impl.Op.type: type = fn_type @FNotFunction.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FNotFunction.as.Destroy.impl.Op: %FNotFunction.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %PossiblyF.type: type = fn_type @PossiblyF [concrete] // CHECK:STDOUT: %PossiblyF: %PossiblyF.type = struct_value () [concrete] // CHECK:STDOUT: %FAlias: type = class_type @FAlias [concrete] // CHECK:STDOUT: %I.impl_witness.bfe: = impl_witness @FAlias.%I.impl_witness_table [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.a69: = impl_witness @FAlias.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.4bf: type = ptr_type %FAlias [concrete] -// CHECK:STDOUT: %pattern_type.310: type = pattern_type %ptr.4bf [concrete] -// CHECK:STDOUT: %FAlias.as.Destroy.impl.Op.type: type = fn_type @FAlias.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FAlias.as.Destroy.impl.Op: %FAlias.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %FExtraParam: type = class_type @FExtraParam [concrete] // CHECK:STDOUT: %I.impl_witness.4a4: = impl_witness @FExtraParam.%I.impl_witness_table [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] @@ -288,11 +271,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %I.facet.888: %I.type = facet_value %FExtraParam, (%I.impl_witness.4a4) [concrete] // CHECK:STDOUT: %FExtraParam.as.I.impl.F.type.edf38f.2: type = fn_type @FExtraParam.as.I.impl.F.loc69_18.2 [concrete] // CHECK:STDOUT: %FExtraParam.as.I.impl.F.388f2d.2: %FExtraParam.as.I.impl.F.type.edf38f.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.837: = impl_witness @FExtraParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.0f2: type = ptr_type %FExtraParam [concrete] -// CHECK:STDOUT: %pattern_type.8d3: type = pattern_type %ptr.0f2 [concrete] -// CHECK:STDOUT: %FExtraParam.as.Destroy.impl.Op.type: type = fn_type @FExtraParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FExtraParam.as.Destroy.impl.Op: %FExtraParam.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %FExtraImplicitParam: type = class_type @FExtraImplicitParam [concrete] // CHECK:STDOUT: %I.impl_witness.c03: = impl_witness @FExtraImplicitParam.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.8ae: type = pattern_type %FExtraImplicitParam [concrete] @@ -301,21 +279,11 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %I.facet.242: %I.type = facet_value %FExtraImplicitParam, (%I.impl_witness.c03) [concrete] // CHECK:STDOUT: %FExtraImplicitParam.as.I.impl.F.type.d9d8e3.2: type = fn_type @FExtraImplicitParam.as.I.impl.F.loc85_23.2 [concrete] // CHECK:STDOUT: %FExtraImplicitParam.as.I.impl.F.49ab47.2: %FExtraImplicitParam.as.I.impl.F.type.d9d8e3.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c16: = impl_witness @FExtraImplicitParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.8c7: type = ptr_type %FExtraImplicitParam [concrete] -// CHECK:STDOUT: %pattern_type.ab8: type = pattern_type %ptr.8c7 [concrete] -// CHECK:STDOUT: %FExtraImplicitParam.as.Destroy.impl.Op.type: type = fn_type @FExtraImplicitParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FExtraImplicitParam.as.Destroy.impl.Op: %FExtraImplicitParam.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %FExtraReturnType: type = class_type @FExtraReturnType [concrete] // CHECK:STDOUT: %I.impl_witness.8ff: = impl_witness @FExtraReturnType.%I.impl_witness_table [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.d1c: %I.type = facet_value %FExtraReturnType, (%I.impl_witness.8ff) [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.467: = impl_witness @FExtraReturnType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.147: type = ptr_type %FExtraReturnType [concrete] -// CHECK:STDOUT: %pattern_type.f1c: type = pattern_type %ptr.147 [concrete] -// CHECK:STDOUT: %FExtraReturnType.as.Destroy.impl.Op.type: type = fn_type @FExtraReturnType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FExtraReturnType.as.Destroy.impl.Op: %FExtraReturnType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %J.type: type = facet_type <@J> [concrete] // CHECK:STDOUT: %Self.bf6: %J.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %J.F.type: type = fn_type @J.F [concrete] @@ -329,11 +297,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %J.facet.b0a: %J.type = facet_value %FMissingParam, (%J.impl_witness.6a1) [concrete] // CHECK:STDOUT: %FMissingParam.as.J.impl.F.type.45f670.2: type = fn_type @FMissingParam.as.J.impl.F.loc117_31.2 [concrete] // CHECK:STDOUT: %FMissingParam.as.J.impl.F.300f33.2: %FMissingParam.as.J.impl.F.type.45f670.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.75c: = impl_witness @FMissingParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.fc8: type = ptr_type %FMissingParam [concrete] -// CHECK:STDOUT: %pattern_type.c8f: type = pattern_type %ptr.fc8 [concrete] -// CHECK:STDOUT: %FMissingParam.as.Destroy.impl.Op.type: type = fn_type @FMissingParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FMissingParam.as.Destroy.impl.Op: %FMissingParam.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %FMissingImplicitParam: type = class_type @FMissingImplicitParam [concrete] // CHECK:STDOUT: %J.impl_witness.5f7: = impl_witness @FMissingImplicitParam.%J.impl_witness_table [concrete] // CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.type.1eb171.1: type = fn_type @FMissingImplicitParam.as.J.impl.F.loc130_26.1 [concrete] @@ -341,11 +304,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %J.facet.2cb: %J.type = facet_value %FMissingImplicitParam, (%J.impl_witness.5f7) [concrete] // CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.type.1eb171.2: type = fn_type @FMissingImplicitParam.as.J.impl.F.loc130_26.2 [concrete] // CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.f3d16f.2: %FMissingImplicitParam.as.J.impl.F.type.1eb171.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.829: = impl_witness @FMissingImplicitParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.c3c: type = ptr_type %FMissingImplicitParam [concrete] -// CHECK:STDOUT: %pattern_type.575: type = pattern_type %ptr.c3c [concrete] -// CHECK:STDOUT: %FMissingImplicitParam.as.Destroy.impl.Op.type: type = fn_type @FMissingImplicitParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FMissingImplicitParam.as.Destroy.impl.Op: %FMissingImplicitParam.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %FMissingReturnType: type = class_type @FMissingReturnType [concrete] // CHECK:STDOUT: %J.impl_witness.901: = impl_witness @FMissingReturnType.%J.impl_witness_table [concrete] // CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.type.2c3eb9.1: type = fn_type @FMissingReturnType.as.J.impl.F.loc152_30.1 [concrete] @@ -353,11 +311,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %J.facet.92c: %J.type = facet_value %FMissingReturnType, (%J.impl_witness.901) [concrete] // CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.type.2c3eb9.2: type = fn_type @FMissingReturnType.as.J.impl.F.loc152_30.2 [concrete] // CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.405ae3.2: %FMissingReturnType.as.J.impl.F.type.2c3eb9.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7f8: = impl_witness @FMissingReturnType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.41e: type = ptr_type %FMissingReturnType [concrete] -// CHECK:STDOUT: %pattern_type.585: type = pattern_type %ptr.41e [concrete] -// CHECK:STDOUT: %FMissingReturnType.as.Destroy.impl.Op.type: type = fn_type @FMissingReturnType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FMissingReturnType.as.Destroy.impl.Op: %FMissingReturnType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: %FDifferentParamType: type = class_type @FDifferentParamType [concrete] @@ -368,11 +321,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %J.facet.bad: %J.type = facet_value %FDifferentParamType, (%J.impl_witness.9c0) [concrete] // CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.type.30a936.2: type = fn_type @FDifferentParamType.as.J.impl.F.loc171_38.2 [concrete] // CHECK:STDOUT: %FDifferentParamType.as.J.impl.F.0ea197.2: %FDifferentParamType.as.J.impl.F.type.30a936.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.1f3: = impl_witness @FDifferentParamType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.f1f: type = ptr_type %FDifferentParamType [concrete] -// CHECK:STDOUT: %pattern_type.e0c: type = pattern_type %ptr.f1f [concrete] -// CHECK:STDOUT: %FDifferentParamType.as.Destroy.impl.Op.type: type = fn_type @FDifferentParamType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FDifferentParamType.as.Destroy.impl.Op: %FDifferentParamType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %FDifferentImplicitParamType: type = class_type @FDifferentImplicitParamType [concrete] // CHECK:STDOUT: %J.impl_witness.5b4: = impl_witness @FDifferentImplicitParamType.%J.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.9cc: type = pattern_type %FDifferentImplicitParamType [concrete] @@ -381,11 +329,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %J.facet.923: %J.type = facet_value %FDifferentImplicitParamType, (%J.impl_witness.5b4) [concrete] // CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.type.ac79c6.2: type = fn_type @FDifferentImplicitParamType.as.J.impl.F.loc184_38.2 [concrete] // CHECK:STDOUT: %FDifferentImplicitParamType.as.J.impl.F.3caa22.2: %FDifferentImplicitParamType.as.J.impl.F.type.ac79c6.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.49f: = impl_witness @FDifferentImplicitParamType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.dc5: type = ptr_type %FDifferentImplicitParamType [concrete] -// CHECK:STDOUT: %pattern_type.986: type = pattern_type %ptr.dc5 [concrete] -// CHECK:STDOUT: %FDifferentImplicitParamType.as.Destroy.impl.Op.type: type = fn_type @FDifferentImplicitParamType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FDifferentImplicitParamType.as.Destroy.impl.Op: %FDifferentImplicitParamType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %FDifferentReturnType: type = class_type @FDifferentReturnType [concrete] // CHECK:STDOUT: %J.impl_witness.bca: = impl_witness @FDifferentReturnType.%J.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.8ee: type = pattern_type %FDifferentReturnType [concrete] @@ -394,11 +337,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %J.facet.a25: %J.type = facet_value %FDifferentReturnType, (%J.impl_witness.bca) [concrete] // CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.type.3243f4.2: type = fn_type @FDifferentReturnType.as.J.impl.F.loc200_38.2 [concrete] // CHECK:STDOUT: %FDifferentReturnType.as.J.impl.F.e4a0b7.2: %FDifferentReturnType.as.J.impl.F.type.3243f4.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.893: = impl_witness @FDifferentReturnType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.954: type = ptr_type %FDifferentReturnType [concrete] -// CHECK:STDOUT: %pattern_type.246: type = pattern_type %ptr.954 [concrete] -// CHECK:STDOUT: %FDifferentReturnType.as.Destroy.impl.Op.type: type = fn_type @FDifferentReturnType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %FDifferentReturnType.as.Destroy.impl.Op: %FDifferentReturnType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.type: type = facet_type <@SelfNested> [concrete] // CHECK:STDOUT: %Self.3de: %SelfNested.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.b27: type = facet_access_type %Self.3de [symbolic] @@ -434,10 +372,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %pattern_type.a5c: type = pattern_type %tuple.type.9c9 [concrete] // CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.type.56b7c1.2: type = fn_type @SelfNestedBadParam.as.SelfNested.impl.F.loc223_87.2 [concrete] // CHECK:STDOUT: %SelfNestedBadParam.as.SelfNested.impl.F.72ff49.2: %SelfNestedBadParam.as.SelfNested.impl.F.type.56b7c1.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.139: = impl_witness @SelfNestedBadParam.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %pattern_type.2a7: type = pattern_type %ptr.4cd [concrete] -// CHECK:STDOUT: %SelfNestedBadParam.as.Destroy.impl.Op.type: type = fn_type @SelfNestedBadParam.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SelfNestedBadParam.as.Destroy.impl.Op: %SelfNestedBadParam.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %SelfNestedBadReturnType: type = class_type @SelfNestedBadReturnType [concrete] // CHECK:STDOUT: %SelfNested.impl_witness.c55: = impl_witness @SelfNestedBadReturnType.%SelfNested.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.612: type = ptr_type %SelfNestedBadReturnType [concrete] @@ -451,22 +385,16 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %pattern_type.f56: type = pattern_type %array_type.126 [concrete] // CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.054b04.2: type = fn_type @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.2 [concrete] // CHECK:STDOUT: %SelfNestedBadReturnType.as.SelfNested.impl.F.abc7a8.2: %SelfNestedBadReturnType.as.SelfNested.impl.F.type.054b04.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.906: = impl_witness @SelfNestedBadReturnType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %pattern_type.4de: type = pattern_type %ptr.612 [concrete] -// CHECK:STDOUT: %SelfNestedBadReturnType.as.Destroy.impl.Op.type: type = fn_type @SelfNestedBadReturnType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SelfNestedBadReturnType.as.Destroy.impl.Op: %SelfNestedBadReturnType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Bool = %Core.Bool // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: .Int = %Core.Int // 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.Bool: %Bool.type = import_ref Core//prelude/parts/bool, Bool, loaded [concrete = constants.%Bool] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] @@ -610,22 +538,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @NoF.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @NoF.as.Destroy.impl: @NoF.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %NoF.as.Destroy.impl.Op.decl: %NoF.as.Destroy.impl.Op.type = fn_decl @NoF.as.Destroy.impl.Op [concrete = constants.%NoF.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.7b5 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.7b5 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.0f9 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NoF [concrete = constants.%NoF] -// CHECK:STDOUT: %self: %ptr.0f9 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %NoF.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @NoF.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @FNotFunction.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: %F.decl: type = class_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: @@ -634,22 +546,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FNotFunction.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FNotFunction.as.Destroy.impl: @FNotFunction.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FNotFunction.as.Destroy.impl.Op.decl: %FNotFunction.as.Destroy.impl.Op.type = fn_decl @FNotFunction.as.Destroy.impl.Op [concrete = constants.%FNotFunction.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.27c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.27c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc28: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.2b2 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FNotFunction [concrete = constants.%FNotFunction] -// CHECK:STDOUT: %self: %ptr.2b2 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FNotFunction.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FNotFunction.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @FAlias.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: %PossiblyF.ref: %PossiblyF.type = name_ref PossiblyF, file.%PossiblyF.decl [concrete = constants.%PossiblyF] // CHECK:STDOUT: %F: %PossiblyF.type = bind_alias F, file.%PossiblyF.decl [concrete = constants.%PossiblyF] @@ -660,22 +556,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FAlias.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FAlias.as.Destroy.impl: @FAlias.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FAlias.as.Destroy.impl.Op.decl: %FAlias.as.Destroy.impl.Op.type = fn_decl @FAlias.as.Destroy.impl.Op [concrete = constants.%FAlias.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.310 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.310 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc44: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.4bf = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FAlias [concrete = constants.%FAlias] -// CHECK:STDOUT: %self: %ptr.4bf = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FAlias.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FAlias.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.edf38f.1 = fn_decl @FExtraParam.as.I.impl.F.loc69_18.1 [concrete = constants.%FExtraParam.as.I.impl.F.388f2d.1] { // CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b [concrete] @@ -696,22 +576,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FExtraParam.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FExtraParam.as.Destroy.impl: @FExtraParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FExtraParam.as.Destroy.impl.Op.decl: %FExtraParam.as.Destroy.impl.Op.type = fn_decl @FExtraParam.as.Destroy.impl.Op [concrete = constants.%FExtraParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.8d3 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.8d3 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc57: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.0f2 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraParam [concrete = constants.%FExtraParam] -// CHECK:STDOUT: %self: %ptr.0f2 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FExtraParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FExtraParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @FExtraImplicitParam.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: %FExtraImplicitParam.as.I.impl.F.decl.loc85_23.1: %FExtraImplicitParam.as.I.impl.F.type.d9d8e3.1 = fn_decl @FExtraImplicitParam.as.I.impl.F.loc85_23.1 [concrete = constants.%FExtraImplicitParam.as.I.impl.F.49ab47.1] { // CHECK:STDOUT: %self.patt: %pattern_type.8ae = binding_pattern self [concrete] @@ -728,22 +592,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FExtraImplicitParam.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FExtraImplicitParam.as.Destroy.impl: @FExtraImplicitParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FExtraImplicitParam.as.Destroy.impl.Op.decl: %FExtraImplicitParam.as.Destroy.impl.Op.type = fn_decl @FExtraImplicitParam.as.Destroy.impl.Op [concrete = constants.%FExtraImplicitParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.ab8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.ab8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc73: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.8c7 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraImplicitParam [concrete = constants.%FExtraImplicitParam] -// CHECK:STDOUT: %self: %ptr.8c7 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FExtraImplicitParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FExtraImplicitParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.831 = return_slot_pattern [concrete] @@ -761,22 +609,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FExtraReturnType.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FExtraReturnType.as.Destroy.impl: @FExtraReturnType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FExtraReturnType.as.Destroy.impl.Op.decl: %FExtraReturnType.as.Destroy.impl.Op.type = fn_decl @FExtraReturnType.as.Destroy.impl.Op [concrete = constants.%FExtraReturnType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f1c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f1c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc90: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.147 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraReturnType [concrete = constants.%FExtraReturnType] -// CHECK:STDOUT: %self: %ptr.147 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FExtraReturnType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FExtraReturnType.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @FMissingParam.as.J.impl: %Self.ref as %J.ref { // CHECK:STDOUT: %FMissingParam.as.J.impl.F.decl.loc117_31.1: %FMissingParam.as.J.impl.F.type.45f670.1 = fn_decl @FMissingParam.as.J.impl.F.loc117_31.1 [concrete = constants.%FMissingParam.as.J.impl.F.300f33.1] { // CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self [concrete] @@ -818,22 +650,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FMissingParam.%J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FMissingParam.as.Destroy.impl: @FMissingParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FMissingParam.as.Destroy.impl.Op.decl: %FMissingParam.as.Destroy.impl.Op.type = fn_decl @FMissingParam.as.Destroy.impl.Op [concrete = constants.%FMissingParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.c8f = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.c8f = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc105: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.fc8 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FMissingParam [concrete = constants.%FMissingParam] -// CHECK:STDOUT: %self: %ptr.fc8 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FMissingParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FMissingParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.1eb171.1 = fn_decl @FMissingImplicitParam.as.J.impl.F.loc130_26.1 [concrete = constants.%FMissingImplicitParam.as.J.impl.F.f3d16f.1] { // CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b [concrete] @@ -875,22 +691,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FMissingImplicitParam.%J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FMissingImplicitParam.as.Destroy.impl: @FMissingImplicitParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FMissingImplicitParam.as.Destroy.impl.Op.decl: %FMissingImplicitParam.as.Destroy.impl.Op.type = fn_decl @FMissingImplicitParam.as.Destroy.impl.Op [concrete = constants.%FMissingImplicitParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.575 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.575 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc121: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.c3c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FMissingImplicitParam [concrete = constants.%FMissingImplicitParam] -// CHECK:STDOUT: %self: %ptr.c3c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FMissingImplicitParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FMissingImplicitParam.%Destroy.impl_witness -// 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.2c3eb9.1 = fn_decl @FMissingReturnType.as.J.impl.F.loc152_30.1 [concrete = constants.%FMissingReturnType.as.J.impl.F.405ae3.1] { // CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self [concrete] @@ -934,22 +734,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FMissingReturnType.%J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FMissingReturnType.as.Destroy.impl: @FMissingReturnType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FMissingReturnType.as.Destroy.impl.Op.decl: %FMissingReturnType.as.Destroy.impl.Op.type = fn_decl @FMissingReturnType.as.Destroy.impl.Op [concrete = constants.%FMissingReturnType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.585 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.585 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc134: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.41e = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FMissingReturnType [concrete = constants.%FMissingReturnType] -// CHECK:STDOUT: %self: %ptr.41e = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FMissingReturnType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FMissingReturnType.%Destroy.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.30a936.1 = fn_decl @FDifferentParamType.as.J.impl.F.loc171_38.1 [concrete = constants.%FDifferentParamType.as.J.impl.F.0ea197.1] { // CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self [concrete] @@ -996,22 +780,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FDifferentParamType.%J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FDifferentParamType.as.Destroy.impl: @FDifferentParamType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FDifferentParamType.as.Destroy.impl.Op.decl: %FDifferentParamType.as.Destroy.impl.Op.type = fn_decl @FDifferentParamType.as.Destroy.impl.Op [concrete = constants.%FDifferentParamType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.e0c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.e0c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc156: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.f1f = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentParamType [concrete = constants.%FDifferentParamType] -// CHECK:STDOUT: %self: %ptr.f1f = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FDifferentParamType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FDifferentParamType.%Destroy.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_38.1: %FDifferentImplicitParamType.as.J.impl.F.type.ac79c6.1 = fn_decl @FDifferentImplicitParamType.as.J.impl.F.loc184_38.1 [concrete = constants.%FDifferentImplicitParamType.as.J.impl.F.3caa22.1] { // CHECK:STDOUT: %self.patt: %pattern_type.9cc = binding_pattern self [concrete] @@ -1058,22 +826,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FDifferentImplicitParamType.%J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FDifferentImplicitParamType.as.Destroy.impl: @FDifferentImplicitParamType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FDifferentImplicitParamType.as.Destroy.impl.Op.decl: %FDifferentImplicitParamType.as.Destroy.impl.Op.type = fn_decl @FDifferentImplicitParamType.as.Destroy.impl.Op [concrete = constants.%FDifferentImplicitParamType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.986 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.986 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc175: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.dc5 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentImplicitParamType [concrete = constants.%FDifferentImplicitParamType] -// CHECK:STDOUT: %self: %ptr.dc5 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FDifferentImplicitParamType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FDifferentImplicitParamType.%Destroy.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.3243f4.1 = fn_decl @FDifferentReturnType.as.J.impl.F.loc200_38.1 [concrete = constants.%FDifferentReturnType.as.J.impl.F.e4a0b7.1] { // CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self [concrete] @@ -1122,22 +874,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @FDifferentReturnType.%J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @FDifferentReturnType.as.Destroy.impl: @FDifferentReturnType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %FDifferentReturnType.as.Destroy.impl.Op.decl: %FDifferentReturnType.as.Destroy.impl.Op.type = fn_decl @FDifferentReturnType.as.Destroy.impl.Op [concrete = constants.%FDifferentReturnType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.246 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.246 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc188: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.954 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentReturnType [concrete = constants.%FDifferentReturnType] -// CHECK:STDOUT: %self: %ptr.954 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %FDifferentReturnType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @FDifferentReturnType.%Destroy.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.56b7c1.1 = fn_decl @SelfNestedBadParam.as.SelfNested.impl.F.loc223_87.1 [concrete = constants.%SelfNestedBadParam.as.SelfNested.impl.F.72ff49.1] { // CHECK:STDOUT: %x.patt: %pattern_type.714 = binding_pattern x [concrete] @@ -1182,22 +918,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @SelfNestedBadParam.%SelfNested.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @SelfNestedBadParam.as.Destroy.impl: @SelfNestedBadParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SelfNestedBadParam.as.Destroy.impl.Op.decl: %SelfNestedBadParam.as.Destroy.impl.Op.type = fn_decl @SelfNestedBadParam.as.Destroy.impl.Op [concrete = constants.%SelfNestedBadParam.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.2a7 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.2a7 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc214: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.4cd = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SelfNestedBadParam [concrete = constants.%SelfNestedBadParam] -// CHECK:STDOUT: %self: %ptr.4cd = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SelfNestedBadParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SelfNestedBadParam.%Destroy.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.054b04.1 = fn_decl @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.1 [concrete = constants.%SelfNestedBadReturnType.as.SelfNested.impl.F.abc7a8.1] { // CHECK:STDOUT: %x.patt: %pattern_type.23f = binding_pattern x [concrete] @@ -1242,22 +962,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: witness = @SelfNestedBadReturnType.%SelfNested.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @SelfNestedBadReturnType.as.Destroy.impl: @SelfNestedBadReturnType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SelfNestedBadReturnType.as.Destroy.impl.Op.decl: %SelfNestedBadReturnType.as.Destroy.impl.Op.type = fn_decl @SelfNestedBadReturnType.as.Destroy.impl.Op [concrete = constants.%SelfNestedBadReturnType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.4de = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.4de = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc227: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.612 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SelfNestedBadReturnType [concrete = constants.%SelfNestedBadReturnType] -// CHECK:STDOUT: %self: %ptr.612 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SelfNestedBadReturnType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SelfNestedBadReturnType.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @NoF { // CHECK:STDOUT: impl_decl @NoF.as.I.impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NoF [concrete = constants.%NoF] @@ -1265,10 +969,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @NoF.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.6bf] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NoF [concrete = constants.%NoF] -// CHECK:STDOUT: impl_decl @NoF.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@NoF.as.Destroy.impl.%NoF.as.Destroy.impl.Op.decl), @NoF.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.69a] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1284,10 +984,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @FNotFunction.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.aac] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FNotFunction [concrete = constants.%FNotFunction] -// CHECK:STDOUT: impl_decl @FNotFunction.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FNotFunction.as.Destroy.impl.%FNotFunction.as.Destroy.impl.Op.decl), @FNotFunction.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.bf9] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1305,10 +1001,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @FAlias.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.bfe] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FAlias [concrete = constants.%FAlias] -// CHECK:STDOUT: impl_decl @FAlias.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FAlias.as.Destroy.impl.%FAlias.as.Destroy.impl.Op.decl), @FAlias.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.a69] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1325,10 +1017,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (@FExtraParam.as.I.impl.%FExtraParam.as.I.impl.F.decl.loc69_18.2), @FExtraParam.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.4a4] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraParam [concrete = constants.%FExtraParam] -// CHECK:STDOUT: impl_decl @FExtraParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FExtraParam.as.Destroy.impl.%FExtraParam.as.Destroy.impl.Op.decl), @FExtraParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.837] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1344,10 +1032,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (@FExtraImplicitParam.as.I.impl.%FExtraImplicitParam.as.I.impl.F.decl.loc85_23.2), @FExtraImplicitParam.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.c03] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraImplicitParam [concrete = constants.%FExtraImplicitParam] -// CHECK:STDOUT: impl_decl @FExtraImplicitParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FExtraImplicitParam.as.Destroy.impl.%FExtraImplicitParam.as.Destroy.impl.Op.decl), @FExtraImplicitParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c16] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1363,10 +1047,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @FExtraReturnType.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.8ff] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraReturnType [concrete = constants.%FExtraReturnType] -// CHECK:STDOUT: impl_decl @FExtraReturnType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FExtraReturnType.as.Destroy.impl.%FExtraReturnType.as.Destroy.impl.Op.decl), @FExtraReturnType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.467] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1382,10 +1062,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (@FMissingParam.as.J.impl.%FMissingParam.as.J.impl.F.decl.loc117_31.2), @FMissingParam.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.6a1] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FMissingParam [concrete = constants.%FMissingParam] -// CHECK:STDOUT: impl_decl @FMissingParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FMissingParam.as.Destroy.impl.%FMissingParam.as.Destroy.impl.Op.decl), @FMissingParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.75c] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1401,10 +1077,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (@FMissingImplicitParam.as.J.impl.%FMissingImplicitParam.as.J.impl.F.decl.loc130_26.2), @FMissingImplicitParam.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.5f7] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FMissingImplicitParam [concrete = constants.%FMissingImplicitParam] -// CHECK:STDOUT: impl_decl @FMissingImplicitParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FMissingImplicitParam.as.Destroy.impl.%FMissingImplicitParam.as.Destroy.impl.Op.decl), @FMissingImplicitParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.829] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1420,10 +1092,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (@FMissingReturnType.as.J.impl.%FMissingReturnType.as.J.impl.F.decl.loc152_30.2), @FMissingReturnType.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.901] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FMissingReturnType [concrete = constants.%FMissingReturnType] -// CHECK:STDOUT: impl_decl @FMissingReturnType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FMissingReturnType.as.Destroy.impl.%FMissingReturnType.as.Destroy.impl.Op.decl), @FMissingReturnType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.7f8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1439,10 +1107,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (@FDifferentParamType.as.J.impl.%FDifferentParamType.as.J.impl.F.decl.loc171_38.2), @FDifferentParamType.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.9c0] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentParamType [concrete = constants.%FDifferentParamType] -// CHECK:STDOUT: impl_decl @FDifferentParamType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FDifferentParamType.as.Destroy.impl.%FDifferentParamType.as.Destroy.impl.Op.decl), @FDifferentParamType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.1f3] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1458,10 +1122,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (@FDifferentImplicitParamType.as.J.impl.%FDifferentImplicitParamType.as.J.impl.F.decl.loc184_38.2), @FDifferentImplicitParamType.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.5b4] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentImplicitParamType [concrete = constants.%FDifferentImplicitParamType] -// CHECK:STDOUT: impl_decl @FDifferentImplicitParamType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FDifferentImplicitParamType.as.Destroy.impl.%FDifferentImplicitParamType.as.Destroy.impl.Op.decl), @FDifferentImplicitParamType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.49f] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1477,10 +1137,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (@FDifferentReturnType.as.J.impl.%FDifferentReturnType.as.J.impl.F.decl.loc200_38.2), @FDifferentReturnType.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness.bca] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentReturnType [concrete = constants.%FDifferentReturnType] -// CHECK:STDOUT: impl_decl @FDifferentReturnType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@FDifferentReturnType.as.Destroy.impl.%FDifferentReturnType.as.Destroy.impl.Op.decl), @FDifferentReturnType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.893] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1496,10 +1152,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %SelfNested.impl_witness_table = impl_witness_table (@SelfNestedBadParam.as.SelfNested.impl.%SelfNestedBadParam.as.SelfNested.impl.F.decl.loc223_87.2), @SelfNestedBadParam.as.SelfNested.impl [concrete] // CHECK:STDOUT: %SelfNested.impl_witness: = impl_witness %SelfNested.impl_witness_table [concrete = constants.%SelfNested.impl_witness.eb9] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SelfNestedBadParam [concrete = constants.%SelfNestedBadParam] -// CHECK:STDOUT: impl_decl @SelfNestedBadParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SelfNestedBadParam.as.Destroy.impl.%SelfNestedBadParam.as.Destroy.impl.Op.decl), @SelfNestedBadParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.139] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1516,10 +1168,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: } // CHECK:STDOUT: %SelfNested.impl_witness_table = impl_witness_table (@SelfNestedBadReturnType.as.SelfNested.impl.%SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc239_112.2), @SelfNestedBadReturnType.as.SelfNested.impl [concrete] // CHECK:STDOUT: %SelfNested.impl_witness: = impl_witness %SelfNested.impl_witness_table [concrete = constants.%SelfNested.impl_witness.c55] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SelfNestedBadReturnType [concrete = constants.%SelfNestedBadReturnType] -// CHECK:STDOUT: impl_decl @SelfNestedBadReturnType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SelfNestedBadReturnType.as.Destroy.impl.%SelfNestedBadReturnType.as.Destroy.impl.Op.decl), @SelfNestedBadReturnType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.906] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1534,14 +1182,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @NoF.as.Destroy.impl.Op(%self.param: %ptr.0f9) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @FNotFunction.as.Destroy.impl.Op(%self.param: %ptr.2b2) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @PossiblyF(); // CHECK:STDOUT: -// CHECK:STDOUT: fn @FAlias.as.Destroy.impl.Op(%self.param: %ptr.4bf) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @FExtraParam.as.I.impl.F.loc69_18.1(%b.param: bool); // CHECK:STDOUT: // CHECK:STDOUT: fn @FExtraParam.as.I.impl.F.loc69_18.2() [thunk @FExtraParam.as.I.impl.%FExtraParam.as.I.impl.F.decl.loc69_18.1] { @@ -1550,8 +1192,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FExtraParam.as.Destroy.impl.Op(%self.param: %ptr.0f2) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @FExtraImplicitParam.as.I.impl.F.loc85_23.1(%self.param: %FExtraImplicitParam); // CHECK:STDOUT: // CHECK:STDOUT: fn @FExtraImplicitParam.as.I.impl.F.loc85_23.2() [thunk @FExtraImplicitParam.as.I.impl.%FExtraImplicitParam.as.I.impl.F.decl.loc85_23.1] { @@ -1561,12 +1201,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FExtraImplicitParam.as.Destroy.impl.Op(%self.param: %ptr.8c7) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @FExtraReturnType.as.I.impl.F() -> bool; // CHECK:STDOUT: -// CHECK:STDOUT: fn @FExtraReturnType.as.Destroy.impl.Op(%self.param: %ptr.147) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @J.F(@J.%Self: %J.type) { // CHECK:STDOUT: fn(%self.param: bool, %b.param: bool) -> bool; // CHECK:STDOUT: } @@ -1583,8 +1219,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FMissingParam.as.Destroy.impl.Op(%self.param: %ptr.fc8) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @FMissingImplicitParam.as.J.impl.F.loc130_26.1(%b.param: bool) -> bool; // CHECK:STDOUT: // CHECK:STDOUT: fn @FMissingImplicitParam.as.J.impl.F.loc130_26.2(%self.param: bool, %b.param: bool) -> bool [thunk @FMissingImplicitParam.as.J.impl.%FMissingImplicitParam.as.J.impl.F.decl.loc130_26.1] { @@ -1597,8 +1231,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return %FMissingImplicitParam.as.J.impl.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FMissingImplicitParam.as.Destroy.impl.Op(%self.param: %ptr.c3c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @FMissingReturnType.as.J.impl.F.loc152_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) -> bool [thunk @FMissingReturnType.as.J.impl.%FMissingReturnType.as.J.impl.F.decl.loc152_30.1] { @@ -1613,8 +1245,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FMissingReturnType.as.Destroy.impl.Op(%self.param: %ptr.41e) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @FDifferentParamType.as.J.impl.F.loc171_38.1(%self.param: bool, %b.param: %FDifferentParamType) -> bool; // CHECK:STDOUT: // CHECK:STDOUT: fn @FDifferentParamType.as.J.impl.F.loc171_38.2(%self.param: bool, %b.param: bool) -> bool [thunk @FDifferentParamType.as.J.impl.%FDifferentParamType.as.J.impl.F.decl.loc171_38.1] { @@ -1629,8 +1259,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return %FDifferentParamType.as.J.impl.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FDifferentParamType.as.Destroy.impl.Op(%self.param: %ptr.f1f) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @FDifferentImplicitParamType.as.J.impl.F.loc184_38.1(%self.param: %FDifferentImplicitParamType, %b.param: bool) -> bool; // CHECK:STDOUT: // CHECK:STDOUT: fn @FDifferentImplicitParamType.as.J.impl.F.loc184_38.2(%self.param: bool, %b.param: bool) -> bool [thunk @FDifferentImplicitParamType.as.J.impl.%FDifferentImplicitParamType.as.J.impl.F.decl.loc184_38.1] { @@ -1645,8 +1273,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return %FDifferentImplicitParamType.as.J.impl.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FDifferentImplicitParamType.as.Destroy.impl.Op(%self.param: %ptr.dc5) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @FDifferentReturnType.as.J.impl.F.loc200_38.1(%self.param: bool, %b.param: bool) -> %return.param: %FDifferentReturnType; // CHECK:STDOUT: // CHECK:STDOUT: fn @FDifferentReturnType.as.J.impl.F.loc200_38.2(%self.param: bool, %b.param: bool) -> bool [thunk @FDifferentReturnType.as.J.impl.%FDifferentReturnType.as.J.impl.F.decl.loc200_38.1] { @@ -1662,8 +1288,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @FDifferentReturnType.as.Destroy.impl.Op(%self.param: %ptr.954) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @SelfNested.F(@SelfNested.%Self: %SelfNested.type) { // CHECK:STDOUT: %Self: %SelfNested.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.3de)] // CHECK:STDOUT: %Self.as_type.loc211_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc211_16.1 (constants.%Self.as_type.b27)] @@ -1693,8 +1317,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return %SelfNestedBadParam.as.SelfNested.impl.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @SelfNestedBadParam.as.Destroy.impl.Op(%self.param: %ptr.4cd) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.1(%x.param: %tuple.type.eb9) -> %return.param: %array_type.a41; // CHECK:STDOUT: // CHECK:STDOUT: fn @SelfNestedBadReturnType.as.SelfNested.impl.F.loc239_112.2(%x.param: %tuple.type.eb9) -> %return.param: %array_type.126 [thunk @SelfNestedBadReturnType.as.SelfNested.impl.%SelfNestedBadReturnType.as.SelfNested.impl.F.decl.loc239_112.1] { @@ -1708,8 +1330,6 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @SelfNestedBadReturnType.as.Destroy.impl.Op(%self.param: %ptr.612) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @I.F(constants.%Self.7ee) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I.F(constants.%I.facet.888) {} diff --git a/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon b/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon index c7bc766647b4..df9141280976 100644 --- a/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon +++ b/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon @@ -56,14 +56,6 @@ impl i32 as I { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.b36: type = class_type @C, @C(%T, %X) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] -// CHECK:STDOUT: %ptr.555: type = ptr_type %C.b36 [symbolic] -// CHECK:STDOUT: %pattern_type.7e5: type = pattern_type %ptr.555 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %I.type: type = facet_type <@I> [concrete] @@ -97,22 +89,18 @@ impl i32 as I { // CHECK:STDOUT: %pattern_type.2bf: type = pattern_type %C.808 [concrete] // CHECK:STDOUT: %i32.as.I.impl.F.type.4dd22d.2: type = fn_type @i32.as.I.impl.F.loc43_18.2 [concrete] // CHECK:STDOUT: %i32.as.I.impl.F.b178b8.2: %i32.as.I.impl.F.type.4dd22d.2 = struct_value () [concrete] -// CHECK:STDOUT: %complete_type.bc1: = complete_type_witness %I.type [concrete] -// CHECK:STDOUT: %complete_type.473: = complete_type_witness type [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Bool = %Core.Bool // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Bool: %Bool.type = import_ref Core//prelude/parts/bool, Bool, loaded [concrete = constants.%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.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] @@ -178,36 +166,6 @@ impl i32 as I { // CHECK:STDOUT: witness = (%I.F.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc15_9.2: type, @C.%X.loc15_19.2: @C.%T.loc15_9.1 (%T)) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @C.as.Destroy.impl.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T, %X) [symbolic = %C (constants.%C.b36)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T, %X) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T, %X) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.7e5) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.7e5) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15_26.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.555) = value_param call_param0 -// CHECK:STDOUT: %.loc15_26.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.b36)] { -// CHECK:STDOUT: %.loc15_26.3: type = specific_constant constants.%C.b36, @C(constants.%T, constants.%X) [symbolic = %C (constants.%C.b36)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc15_26.3 [symbolic = %C (constants.%C.b36)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.555) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @bool.as.I.impl: %.loc28_6.2 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.patt: %pattern_type.57d = binding_pattern c [concrete] @@ -266,13 +224,8 @@ impl i32 as I { // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc15_9.1 [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %T.loc15_9.1 [symbolic = %require_complete (constants.%require_complete.4ae)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.b36 [symbolic = @C.as.Destroy.impl.%C (constants.%C.b36)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T, constants.%X) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -281,18 +234,6 @@ impl i32 as I { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc15_9.2: type, @C.%X.loc15_19.2: @C.%T.loc15_9.1 (%T)) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @C.as.Destroy.impl.Op.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T, %X) [symbolic = %C (constants.%C.b36)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.555)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.7e5)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.555)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] // CHECK:STDOUT: %C.loc25_17.1: type = class_type @C, @C(constants.%I.type, %Self) [symbolic = %C.loc25_17.1 (constants.%C.b2a)] @@ -320,21 +261,6 @@ impl i32 as I { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %C => constants.%C.b36 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %C => constants.%C.b36 -// CHECK:STDOUT: %ptr => constants.%ptr.555 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7e5 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%I.type, constants.%Self.7ee) { // CHECK:STDOUT: %T.loc15_9.1 => constants.%I.type // CHECK:STDOUT: %X.loc15_19.1 => constants.%Self.7ee @@ -365,7 +291,6 @@ impl i32 as I { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.473 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I.F(constants.%I.facet.0ee) { @@ -380,6 +305,5 @@ impl i32 as I { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.09a // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.bc1 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/forward_decls.carbon b/toolchain/check/testdata/impl/forward_decls.carbon index 95c0db5e0279..ff3536dc0a18 100644 --- a/toolchain/check/testdata/impl/forward_decls.carbon +++ b/toolchain/check/testdata/impl/forward_decls.carbon @@ -583,38 +583,29 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %.Self: %I.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %.Self, @I [symbolic_self] // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] -// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -647,7 +638,7 @@ interface I { // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x [concrete] // CHECK:STDOUT: } // 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] @@ -679,7 +670,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %T: type = assoc_const_decl @T [concrete] { // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete = constants.%assoc0] // CHECK:STDOUT: } @@ -694,32 +685,12 @@ interface I { // CHECK:STDOUT: assoc_const T:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref.loc7 as %.loc7_13 { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -727,15 +698,13 @@ interface I { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc9: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T(constants.%Self.7ee) {} +// CHECK:STDOUT: specific @T(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @T(constants.%.Self) {} // CHECK:STDOUT: @@ -745,38 +714,29 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %.Self: %I.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %.Self, @I [symbolic_self] // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] -// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -809,7 +769,7 @@ interface I { // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x [concrete] // CHECK:STDOUT: } // 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] @@ -843,7 +803,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %T: type = assoc_const_decl @T [concrete] { // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete = constants.%assoc0] // CHECK:STDOUT: } @@ -858,32 +818,12 @@ interface I { // CHECK:STDOUT: assoc_const T:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref.loc7 as %.loc7_13 { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -891,15 +831,13 @@ interface I { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc9: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T(constants.%Self.7ee) {} +// CHECK:STDOUT: specific @T(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @T(constants.%.Self) {} // CHECK:STDOUT: @@ -909,31 +847,22 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -973,7 +902,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %T: type = assoc_const_decl @T [concrete] { // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete = constants.%assoc0] // CHECK:STDOUT: } @@ -988,32 +917,12 @@ interface I { // CHECK:STDOUT: assoc_const T:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref.loc7 as %I.ref.loc7 { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1021,15 +930,13 @@ interface I { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc13: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @T(constants.%Self.7ee) {} +// CHECK:STDOUT: specific @T(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @T(constants.%I.facet) {} // CHECK:STDOUT: @@ -1039,31 +946,17 @@ interface I { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.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: %.Self: %I.type = bind_symbolic_name .Self [symbolic_self] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1105,7 +998,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self @@ -1113,48 +1006,12 @@ interface I { // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @D.as..impl: %D.ref.loc13 as %.loc13 { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1163,10 +1020,6 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1174,17 +1027,13 @@ interface I { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- associated_const_of_parameterized.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.659: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.b13: type = facet_type <@I, @I(%U)> [symbolic] @@ -1193,13 +1042,6 @@ interface I { // CHECK:STDOUT: %assoc0.7f3: %I.assoc_type.1e5 = assoc_entity element0, @I.%T [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.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: %I.type.fc3: type = facet_type <@I, @I(%C)> [concrete] @@ -1212,20 +1054,13 @@ interface I { // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] // CHECK:STDOUT: %I_where.type: type = facet_type <@I, @I(%C) where %impl.elem0 = %C> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1237,7 +1072,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self.659] // CHECK:STDOUT: %U.loc3_13.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc3_13.1 (constants.%U)] @@ -1312,48 +1147,12 @@ interface I { // CHECK:STDOUT: assoc_const T:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.I.impl: %D.ref.loc8 as %.loc8_16 { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1362,10 +1161,6 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1373,10 +1168,6 @@ interface I { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%U) { // CHECK:STDOUT: %U.loc3_13.1 => constants.%U // CHECK:STDOUT: } @@ -1400,13 +1191,6 @@ interface I { // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.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: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] @@ -1422,21 +1206,14 @@ interface I { // CHECK:STDOUT: %pattern_type.480: type = pattern_type %C.cc1 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.250: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.2e8: type = ptr_type %C.8f0 [symbolic] -// CHECK:STDOUT: %pattern_type.09c: type = pattern_type %ptr.2e8 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1510,68 +1287,19 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.I.impl: %D.ref.loc5 as %I.ref.loc5 { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc12: %I.type) { -// CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.8f0)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.250)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.09c) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.09c) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12_16.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.2e8) = value_param call_param0 -// CHECK:STDOUT: %.loc12_16.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.8f0)] { -// CHECK:STDOUT: %.loc12_16.3: type = specific_constant constants.%C.8f0, @C(constants.%T) [symbolic = %C (constants.%C.8f0)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc12_16.3 [symbolic = %C (constants.%C.8f0)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.2e8) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1585,10 +1313,6 @@ interface I { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.8f0 [symbolic = @C.as.Destroy.impl.%C (constants.%C.8f0)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.250)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1597,24 +1321,11 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%x.param.loc14: %C.cc1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc12: %I.type) { -// CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.8f0)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.2e8)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.09c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.2e8)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { // CHECK:STDOUT: %T.loc6_9.1 => constants.%T // CHECK:STDOUT: } @@ -1625,19 +1336,6 @@ interface I { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.8f0 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.250 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.8f0 -// CHECK:STDOUT: %ptr => constants.%ptr.2e8 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.09c -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_two_interfaces.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1716,36 +1414,27 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete] // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.%U [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %.Self: %I.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %.Self, @I [symbolic_self] // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1795,7 +1484,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %T: type = assoc_const_decl @T [concrete] { // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete = constants.%assoc0] // CHECK:STDOUT: } @@ -1818,32 +1507,12 @@ interface I { // CHECK:STDOUT: assoc_const U:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref.loc9 as %.loc9_13 { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1851,11 +1520,9 @@ interface I { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; +// CHECK:STDOUT: specific @T(constants.%Self) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @T(constants.%Self.7ee) {} -// CHECK:STDOUT: -// CHECK:STDOUT: specific @U(constants.%Self.7ee) {} +// CHECK:STDOUT: specific @U(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @T(constants.%.Self) {} // CHECK:STDOUT: @@ -1878,13 +1545,6 @@ interface I { // CHECK:STDOUT: %X.impl_witness: = impl_witness file.%X.impl_witness_table [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self.0ee: %X.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %pattern_type.c48: type = pattern_type %C [concrete] @@ -1900,11 +1560,9 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2029,32 +1687,12 @@ interface I { // CHECK:STDOUT: witness = file.%X.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc23: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.Y.impl: %C.ref.loc36 as %Y.ref.loc36 { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Y.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -2087,8 +1725,6 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @H(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl.loc6 [concrete = constants.%F] @@ -2137,31 +1773,22 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %I.F.type: type = fn_type @I.F [concrete] // CHECK:STDOUT: %I.F: %I.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%I.F.decl [concrete] -// CHECK:STDOUT: %C: type = class_type @C, @C(%Self.7ee) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%Self.7ee) [symbolic] -// CHECK:STDOUT: %ptr.12a: type = ptr_type %C [symbolic] -// CHECK:STDOUT: %pattern_type.d53: type = pattern_type %ptr.12a [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Self.7ee) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] +// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %I.impl_witness: = impl_witness @I.F.%I.impl_witness_table, @C.as.I.impl(%Self.7ee) [symbolic] +// CHECK:STDOUT: %I.impl_witness: = impl_witness @I.F.%I.impl_witness_table, @C.as.I.impl(%Self) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2174,7 +1801,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %I.F.decl: %I.F.type = fn_decl @I.F [concrete = constants.%I.F] {} {} // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.F.decl [concrete = constants.%assoc0] // CHECK:STDOUT: @@ -2185,37 +1812,8 @@ interface I { // CHECK:STDOUT: witness = (%I.F.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@I.%Self: %I.type) { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%Self) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Self) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d53) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d53) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10_13.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.12a) = value_param call_param0 -// CHECK:STDOUT: %.loc10_13.2: type = splice_block %Self.ref [symbolic = %C (constants.%C)] { -// CHECK:STDOUT: %.loc10_13.3: type = specific_constant constants.%C, @C(constants.%Self.7ee) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc10_13.3 [symbolic = %C (constants.%C)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.12a) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(@I.%Self: %I.type) { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] // CHECK:STDOUT: %I.impl_witness: = impl_witness @I.F.%I.impl_witness_table, @C.as.I.impl(%Self) [symbolic = %I.impl_witness (constants.%I.impl_witness)] // CHECK:STDOUT: @@ -2232,10 +1830,6 @@ interface I { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [symbolic = @C.as.Destroy.impl.%C (constants.%C)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%Self.7ee) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -2246,7 +1840,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { @@ -2257,7 +1851,7 @@ interface I { // CHECK:STDOUT: %I.ref.loc11: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @C.as.I.impl [concrete] -// CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table, @C.as.I.impl(constants.%Self.7ee) [symbolic = @C.as.I.impl.%I.impl_witness (constants.%I.impl_witness)] +// CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table, @C.as.I.impl(constants.%Self) [symbolic = @C.as.I.impl.%I.impl_witness (constants.%I.impl_witness)] // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} { // CHECK:STDOUT: %C.ref.loc20: type = name_ref C, @I.F.%C.decl [symbolic = %C (constants.%C)] // CHECK:STDOUT: %I.ref.loc20: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -2266,36 +1860,12 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@I.%Self: %I.type) { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.12a)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d53)] +// CHECK:STDOUT: specific @I.F(constants.%Self) {} // CHECK:STDOUT: -// CHECK:STDOUT: !definition: +// CHECK:STDOUT: specific @C(constants.%Self) {} // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.12a)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @I.F(constants.%Self.7ee) {} -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C(constants.%Self.7ee) {} -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%Self.7ee) { -// CHECK:STDOUT: %Self => constants.%Self.7ee -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%Self.7ee) { -// CHECK:STDOUT: %Self => constants.%Self.7ee -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %ptr => constants.%ptr.12a -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d53 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.I.impl(constants.%Self.7ee) { -// CHECK:STDOUT: %Self => constants.%Self.7ee +// CHECK:STDOUT: specific @C.as.I.impl(constants.%Self) { +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %C => constants.%C // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness // CHECK:STDOUT: } @@ -2304,20 +1874,13 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%U [concrete] // CHECK:STDOUT: %I.F.type: type = fn_type @I.F [concrete] // CHECK:STDOUT: %I.F: %I.F.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.%I.F.decl [concrete] -// CHECK:STDOUT: %C: type = class_type @C, @C(%Self.7ee) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%Self.7ee) [symbolic] -// CHECK:STDOUT: %ptr.12a: type = ptr_type %C [symbolic] -// CHECK:STDOUT: %pattern_type.d53: type = pattern_type %ptr.12a [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Self.7ee) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [symbolic] +// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic_self] @@ -2326,16 +1889,14 @@ interface I { // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = %C> [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %I_where.type [symbolic] -// CHECK:STDOUT: %I.impl_witness: = impl_witness @I.F.%I.impl_witness_table, @C.as.I.impl(%Self.7ee) [symbolic] +// CHECK:STDOUT: %I.impl_witness: = impl_witness @I.F.%I.impl_witness_table, @C.as.I.impl(%Self) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2348,7 +1909,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %U: type = assoc_const_decl @U [concrete] { // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%U [concrete = constants.%assoc0] // CHECK:STDOUT: } @@ -2367,37 +1928,8 @@ interface I { // CHECK:STDOUT: assoc_const U:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@I.%Self: %I.type) { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%Self) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Self) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d53) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d53) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11_13.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.12a) = value_param call_param0 -// CHECK:STDOUT: %.loc11_13.2: type = splice_block %Self.ref [symbolic = %C (constants.%C)] { -// CHECK:STDOUT: %.loc11_13.3: type = specific_constant constants.%C, @C(constants.%Self.7ee) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc11_13.3 [symbolic = %C (constants.%C)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.12a) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(@I.%Self: %I.type) { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where constants.%impl.elem0 = %C> [symbolic = %I_where.type (constants.%I_where.type)] // CHECK:STDOUT: %require_complete: = require_complete_type %I_where.type [symbolic = %require_complete (constants.%require_complete)] @@ -2416,10 +1948,6 @@ interface I { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [symbolic = @C.as.Destroy.impl.%C (constants.%C)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%Self.7ee) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -2430,7 +1958,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { @@ -2452,7 +1980,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (%impl_witness_assoc_constant, ), @C.as.I.impl [concrete] -// CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table, @C.as.I.impl(constants.%Self.7ee) [symbolic = @C.as.I.impl.%I.impl_witness (constants.%I.impl_witness)] +// CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table, @C.as.I.impl(constants.%Self) [symbolic = @C.as.I.impl.%I.impl_witness (constants.%I.impl_witness)] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%C [symbolic = @C.as.I.impl.%C (constants.%C)] // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} { // CHECK:STDOUT: %C.ref.loc21_10: type = name_ref C, @I.F.%C.decl [symbolic = %C (constants.%C)] @@ -2473,40 +2001,16 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@I.%Self: %I.type) { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.12a)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d53)] +// CHECK:STDOUT: specific @U(constants.%Self) {} // CHECK:STDOUT: -// CHECK:STDOUT: !definition: +// CHECK:STDOUT: specific @I.F(constants.%Self) {} // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.12a)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @U(constants.%Self.7ee) {} -// CHECK:STDOUT: -// CHECK:STDOUT: specific @I.F(constants.%Self.7ee) {} -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C(constants.%Self.7ee) {} -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%Self.7ee) { -// CHECK:STDOUT: %Self => constants.%Self.7ee -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%Self.7ee) { -// CHECK:STDOUT: %Self => constants.%Self.7ee -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %ptr => constants.%ptr.12a -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d53 -// CHECK:STDOUT: } +// CHECK:STDOUT: specific @C(constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%.Self) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.I.impl(constants.%Self.7ee) { -// CHECK:STDOUT: %Self => constants.%Self.7ee +// CHECK:STDOUT: specific @C.as.I.impl(constants.%Self) { +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %C => constants.%C // CHECK:STDOUT: %I_where.type => constants.%I_where.type // CHECK:STDOUT: %require_complete => constants.%require_complete diff --git a/toolchain/check/testdata/impl/impl_as.carbon b/toolchain/check/testdata/impl/impl_as.carbon index 25178d57b742..787b0d2e35eb 100644 --- a/toolchain/check/testdata/impl/impl_as.carbon +++ b/toolchain/check/testdata/impl/impl_as.carbon @@ -40,17 +40,17 @@ class C { // CHECK:STDOUT: %C.as.Simple.impl.F.type: type = fn_type @C.as.Simple.impl.F [concrete] // CHECK:STDOUT: %C.as.Simple.impl.F: %C.as.Simple.impl.F.type = struct_value () [concrete] // CHECK:STDOUT: %Simple.facet: %Simple.type = facet_value %C, (%Simple.impl_witness) [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -93,22 +93,6 @@ class C { // CHECK:STDOUT: witness = @C.%Simple.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: impl_decl @C.as.Simple.impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -116,11 +100,7 @@ class C { // CHECK:STDOUT: } // CHECK:STDOUT: %Simple.impl_witness_table = impl_witness_table (@C.as.Simple.impl.%C.as.Simple.impl.F.decl), @C.as.Simple.impl [concrete] // CHECK:STDOUT: %Simple.impl_witness: = impl_witness %Simple.impl_witness_table [concrete = constants.%Simple.impl_witness] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -142,18 +122,20 @@ class C { // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %.loc23_19.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc23_19.2: init %C = class_init (), %c.var [concrete = constants.%C.val] -// CHECK:STDOUT: %.loc23_7: init %C = converted %.loc23_19.1, %.loc23_19.2 [concrete = constants.%C.val] -// CHECK:STDOUT: assign %c.var, %.loc23_7 +// CHECK:STDOUT: %.loc23_7.1: init %C = converted %.loc23_19.1, %.loc23_19.2 [concrete = constants.%C.val] +// CHECK:STDOUT: assign %c.var, %.loc23_7.1 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc23_7.2: %type_where = converted constants.%C, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.019 = addr_of %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @Simple.F(constants.%Self.8ef) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple.F(constants.%Simple.facet) {} diff --git a/toolchain/check/testdata/impl/impl_thunk.carbon b/toolchain/check/testdata/impl/impl_thunk.carbon index fdf3cf210418..09d040b5056b 100644 --- a/toolchain/check/testdata/impl/impl_thunk.carbon +++ b/toolchain/check/testdata/impl/impl_thunk.carbon @@ -411,16 +411,16 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] +// CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] // CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.84a1c2.1: type = fn_type @B.as.X.impl.F.loc14_39.1 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.b849c8.1: %B.as.X.impl.F.type.84a1c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.84a1c2.2: type = fn_type @B.as.X.impl.F.loc14_39.2 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.b849c8.2: %B.as.X.impl.F.type.84a1c2.2 = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -508,8 +508,8 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.84a1c2.1: type = fn_type @B.as.X.impl.F.loc13_26.1 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.b849c8.1: %B.as.X.impl.F.type.84a1c2.1 = struct_value () [concrete] @@ -562,16 +562,16 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] +// CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] // CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.84a1c2.1: type = fn_type @B.as.X.impl.F.loc14_39.1 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.b849c8.1: %B.as.X.impl.F.type.84a1c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] // CHECK:STDOUT: %B.as.X.impl.F.type.84a1c2.2: type = fn_type @B.as.X.impl.F.loc14_39.2 [concrete] // CHECK:STDOUT: %B.as.X.impl.F.b849c8.2: %B.as.X.impl.F.type.84a1c2.2 = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -659,16 +659,18 @@ impl () as I({}) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %A.as.X.impl.F.type.dc7bda.1: type = fn_type @A.as.X.impl.F.loc23_14.1 [concrete] // CHECK:STDOUT: %A.as.X.impl.F.0afbb1.1: %A.as.X.impl.F.type.dc7bda.1 = struct_value () [concrete] // CHECK:STDOUT: %A.as.X.impl.F.type.dc7bda.2: type = fn_type @A.as.X.impl.F.loc23_14.2 [concrete] // CHECK:STDOUT: %A.as.X.impl.F.0afbb1.2: %A.as.X.impl.F.type.dc7bda.2 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %B, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.018: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.68f: %AggregateT.as_type.as.Destroy.impl.Op.type.018 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -707,9 +709,13 @@ impl () as I({}) { // CHECK:STDOUT: %.loc23_14.3: ref %A = class_element_access %.loc23_14.2, element0 // CHECK:STDOUT: %.loc23_14.4: ref %A = converted %A.as.X.impl.F.call, %.loc23_14.3 // CHECK:STDOUT: %.loc23_14.5: %A = bind_value %.loc23_14.4 -// CHECK:STDOUT: %B.as.Destroy.impl.Op.bound: = bound_method %.loc23_14.2, constants.%B.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%B, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc23_14.6: %type_where = converted constants.%B, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc23_14.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.68f +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method: = bound_method %.loc23_14.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.e79 = addr_of %.loc23_14.2 -// CHECK:STDOUT: %B.as.Destroy.impl.Op.call: init %empty_tuple.type = call %B.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/import_thunk.carbon b/toolchain/check/testdata/impl/import_thunk.carbon index 0d6d8c4df904..bfbbaefd2124 100644 --- a/toolchain/check/testdata/impl/import_thunk.carbon +++ b/toolchain/check/testdata/impl/import_thunk.carbon @@ -108,15 +108,6 @@ fn G() { // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.13320f.1: type = class_type @C, @C(%X) [symbolic] -// 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] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.50efff.1: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%X) [symbolic] -// CHECK:STDOUT: %ptr.40dc71.1: type = ptr_type %C.13320f.1 [symbolic] -// CHECK:STDOUT: %pattern_type.2a1e48.1: type = pattern_type %ptr.40dc71.1 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.9209e7.1: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%X) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.be9069.1: %C.as.Destroy.impl.Op.type.9209e7.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: %Y: %empty_tuple.type = bind_symbolic_name Y, 0 [symbolic] @@ -136,17 +127,20 @@ fn G() { // CHECK:STDOUT: %require_complete.a35: = require_complete_type %C.13320f.2 [symbolic] // CHECK:STDOUT: %C.as.I.impl.F.specific_fn: = specific_function %C.as.I.impl.F.e1c928.1, @C.as.I.impl.F.loc8_17.1(%Y) [symbolic] // CHECK:STDOUT: %C.val: %C.13320f.2 = struct_value () [symbolic] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %Destroy.assoc_type: type = assoc_entity_type @Destroy [concrete] // CHECK:STDOUT: %assoc0: %Destroy.assoc_type = assoc_entity element0, imports.%Core.import_ref.725 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.50efff.2: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%Y) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.9209e7.2: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Y) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.be9069.2: %C.as.Destroy.impl.Op.type.9209e7.2 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.facet.423b0d.2: %Destroy.type = facet_value %C.13320f.2, (%Destroy.impl_witness.50efff.2) [symbolic] -// CHECK:STDOUT: %.087: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.423b0d.2 [symbolic] -// CHECK:STDOUT: %ptr.40dc71.2: type = ptr_type %C.13320f.2 [symbolic] -// CHECK:STDOUT: %pattern_type.2a1e48.2: type = pattern_type %ptr.40dc71.2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function %C.as.Destroy.impl.Op.be9069.2, @C.as.Destroy.impl.Op(%Y) [symbolic] -// CHECK:STDOUT: %require_complete.0b0: = require_complete_type %ptr.40dc71.2 [symbolic] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] +// CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C.13320f.2, () [symbolic] +// CHECK:STDOUT: %ptr.40d: type = ptr_type %C.13320f.2 [symbolic] +// CHECK:STDOUT: %require_complete.0b0: = require_complete_type %ptr.40d [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.947: = lookup_impl_witness %C.13320f.2, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %C.13320f.2, (%Destroy.lookup_impl_witness.947) [symbolic] +// CHECK:STDOUT: %.763: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet [symbolic] +// CHECK:STDOUT: %impl.elem0.ea9: %.763 = impl_witness_access %Destroy.lookup_impl_witness.947, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.c3e: = specific_impl_function %impl.elem0.ea9, @Destroy.Op(%Destroy.facet) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -156,12 +150,12 @@ fn G() { // 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.import_ref.f99: %Destroy.assoc_type = import_ref Core//prelude/parts/destroy, loc10_28, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Main.import_ref.8e7 = import_ref Main//a, inst19 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.507 = import_ref Main//a, loc5_14, unloaded // CHECK:STDOUT: %Main.F: %I.F.type = import_ref Main//a, F, loaded [concrete = constants.%I.F] // CHECK:STDOUT: %Main.import_ref.de2: %I.type = import_ref Main//a, inst19 [no loc], loaded [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] +// CHECK:STDOUT: %Core.import_ref.f99: %Destroy.assoc_type = import_ref Core//prelude/parts/destroy, loc10_28, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Core.import_ref.725: %Destroy.Op.type = import_ref Core//prelude/parts/destroy, loc10_28, loaded [concrete = constants.%Destroy.Op] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -208,35 +202,6 @@ fn G() { // CHECK:STDOUT: witness = (imports.%Main.F) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%X.loc5_9.2: %empty_tuple.type) { -// CHECK:STDOUT: %X: %empty_tuple.type = bind_symbolic_name X, 0 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%X) [symbolic = %C (constants.%C.13320f.1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%X) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.50efff.1)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%X) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.9209e7.1)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.9209e7.1) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.be9069.1)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.9209e7.1) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.be9069.1)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.2a1e48.1) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.2a1e48.1) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5_17.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.40dc71.1) = value_param call_param0 -// CHECK:STDOUT: %.loc5_17.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.13320f.1)] { -// CHECK:STDOUT: %.loc5_17.3: type = specific_constant constants.%C.13320f.1, @C(constants.%X) [symbolic = %C (constants.%C.13320f.1)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_17.3 [symbolic = %C (constants.%C.13320f.1)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.40dc71.1) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%Y.loc7_14.2: %empty_tuple.type) { // CHECK:STDOUT: %Y.loc7_14.1: %empty_tuple.type = bind_symbolic_name Y, 0 [symbolic = %Y.loc7_14.1 (constants.%Y)] // CHECK:STDOUT: %C.loc7_25.1: type = class_type @C, @C(%Y.loc7_14.1) [symbolic = %C.loc7_25.1 (constants.%C.13320f.2)] @@ -283,10 +248,6 @@ fn G() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.13320f.1 [symbolic = @C.as.Destroy.impl.%C (constants.%C.13320f.1)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%X) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.50efff.1)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -295,17 +256,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%X.loc5_9.2: %empty_tuple.type) { -// CHECK:STDOUT: %X: %empty_tuple.type = bind_symbolic_name X, 0 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%X) [symbolic = %C (constants.%C.13320f.1)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.40dc71.1)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.2a1e48.1)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.40dc71.1)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(imports.%Main.import_ref.de2: %I.type) [from "a.carbon"] { // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -333,13 +283,13 @@ fn G() { // CHECK:STDOUT: %C: type = class_type @C, @C(%Y) [symbolic = %C (constants.%C.13320f.2)] // CHECK:STDOUT: %require_complete.1: = require_complete_type %C [symbolic = %require_complete.1 (constants.%require_complete.a35)] // CHECK:STDOUT: %C.val: @C.as.I.impl.F.loc8_17.2.%C (%C.13320f.2) = struct_value () [symbolic = %C.val (constants.%C.val)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%Y) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.50efff.2)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %C, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.423b0d.2)] -// CHECK:STDOUT: %.6: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.6 (constants.%.087)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Y) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.9209e7.2)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.I.impl.F.loc8_17.2.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.9209e7.2) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.be9069.2)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function %C.as.Destroy.impl.Op, @C.as.Destroy.impl.Op(%Y) [symbolic = %C.as.Destroy.impl.Op.specific_fn (constants.%C.as.Destroy.impl.Op.specific_fn)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.40dc71.2)] +// CHECK:STDOUT: %facet_value.2: %type_where = facet_value %C, () [symbolic = %facet_value.2 (constants.%facet_value)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %C, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.947)] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %C, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)] +// CHECK:STDOUT: %.8: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.8 (constants.%.763)] +// CHECK:STDOUT: %impl.elem0.2: @C.as.I.impl.F.loc8_17.2.%.8 (%.763) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.2 (constants.%impl.elem0.ea9)] +// CHECK:STDOUT: %specific_impl_fn.2: = specific_impl_function %impl.elem0.2, @Destroy.Op(%Destroy.facet) [symbolic = %specific_impl_fn.2 (constants.%specific_impl_fn.c3e)] +// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.40d)] // CHECK:STDOUT: %require_complete.2: = require_complete_type %ptr [symbolic = %require_complete.2 (constants.%require_complete.0b0)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: %empty_struct_type) [thunk @C.as.I.impl.%C.as.I.impl.F.decl.loc8_17.1] { @@ -355,12 +305,14 @@ fn G() { // CHECK:STDOUT: %.5: @C.as.I.impl.F.loc8_17.2.%C (%C.13320f.2) = bind_value %.4 // CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %C.as.I.impl.F.specific_fn.loc8_17.1(%.5) // CHECK:STDOUT: %Op.ref: %Destroy.assoc_type = name_ref Op, imports.%Core.import_ref.f99 [concrete = constants.%assoc0] -// CHECK:STDOUT: %impl.elem0: @C.as.I.impl.F.loc8_17.2.%.6 (%.087) = impl_witness_access constants.%Destroy.impl_witness.50efff.2, element0 [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.be9069.2)] -// CHECK:STDOUT: %bound_method.1: = bound_method %.3, %impl.elem0 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @C.as.Destroy.impl.Op(constants.%Y) [symbolic = %C.as.Destroy.impl.Op.specific_fn (constants.%C.as.Destroy.impl.Op.specific_fn)] -// CHECK:STDOUT: %bound_method.2: = bound_method %.3, %specific_fn -// CHECK:STDOUT: %addr: @C.as.I.impl.F.loc8_17.2.%ptr (%ptr.40dc71.2) = addr_of %.3 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.2(%addr) +// CHECK:STDOUT: %facet_value.1: %type_where = facet_value constants.%C.13320f.2, () [symbolic = %facet_value.2 (constants.%facet_value)] +// CHECK:STDOUT: %.6: %type_where = converted constants.%C.13320f.2, %facet_value.1 [symbolic = %facet_value.2 (constants.%facet_value)] +// CHECK:STDOUT: %impl.elem0.1: @C.as.I.impl.F.loc8_17.2.%.8 (%.763) = impl_witness_access constants.%Destroy.lookup_impl_witness.947, element0 [symbolic = %impl.elem0.2 (constants.%impl.elem0.ea9)] +// CHECK:STDOUT: %bound_method.1: = bound_method %.3, %impl.elem0.1 +// CHECK:STDOUT: %specific_impl_fn.1: = specific_impl_function %impl.elem0.1, @Destroy.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.2 (constants.%specific_impl_fn.c3e)] +// CHECK:STDOUT: %bound_method.2: = bound_method %.3, %specific_impl_fn.1 +// CHECK:STDOUT: %addr: @C.as.I.impl.F.loc8_17.2.%ptr (%ptr.40d) = addr_of %.3 +// CHECK:STDOUT: %.7: init %empty_tuple.type = call %bound_method.2(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -369,19 +321,6 @@ fn G() { // CHECK:STDOUT: %X.loc5_9.1 => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%X) { -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %C => constants.%C.13320f.1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.50efff.1 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%X) { -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %C => constants.%C.13320f.1 -// CHECK:STDOUT: %ptr => constants.%ptr.40dc71.1 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2a1e48.1 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%Y) { // CHECK:STDOUT: %X.loc5_9.1 => constants.%Y // CHECK:STDOUT: @@ -415,23 +354,6 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.F.loc8_17.2(constants.%Y) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%Y) { -// CHECK:STDOUT: %X => constants.%Y -// CHECK:STDOUT: %C => constants.%C.13320f.2 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.50efff.2 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.9209e7.2 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.be9069.2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%Y) { -// CHECK:STDOUT: %X => constants.%Y -// CHECK:STDOUT: %C => constants.%C.13320f.2 -// CHECK:STDOUT: %ptr => constants.%ptr.40dc71.2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2a1e48.2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- c.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -443,7 +365,6 @@ 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: %X: %empty_tuple.type = bind_symbolic_name X, 0 [symbolic] -// CHECK:STDOUT: %C.13320f.1: type = class_type @C, @C(%X) [symbolic] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.607: type = class_type @C, @C(%empty_tuple) [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] @@ -463,22 +384,17 @@ fn G() { // CHECK:STDOUT: %require_complete.a35: = require_complete_type %C.13320f.2 [symbolic] // CHECK:STDOUT: %C.as.I.impl.F.specific_fn.091: = specific_function %C.as.I.impl.F.e1c928.1, @C.as.I.impl.F.1(%Y) [symbolic] // CHECK:STDOUT: %C.val.56a: %C.13320f.2 = struct_value () [symbolic] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.2c0: %type_where = facet_value %C.13320f.2, () [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.f337bc.1: = impl_witness imports.%Destroy.impl_witness_table.458, @C.as.Destroy.impl(%Y) [symbolic] -// CHECK:STDOUT: %Destroy.facet.5f3: %Destroy.type = facet_value %C.13320f.2, (%Destroy.impl_witness.f337bc.1) [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.5ce: = lookup_impl_witness %C.13320f.2, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.facet.886: %Destroy.type = facet_value %C.13320f.2, (%Destroy.lookup_impl_witness.5ce) [symbolic] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %.a90: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.5f3 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.68cd87.1: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%X) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.5a4f36.1: %C.as.Destroy.impl.Op.type.68cd87.1 = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.40dc71.1: type = ptr_type %C.13320f.1 [symbolic] -// CHECK:STDOUT: %pattern_type.2a1e48.1: type = pattern_type %ptr.40dc71.1 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.68cd87.2: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Y) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.5a4f36.2: %C.as.Destroy.impl.Op.type.68cd87.2 = struct_value () [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.769: = specific_function %C.as.Destroy.impl.Op.5a4f36.2, @C.as.Destroy.impl.Op(%Y) [symbolic] -// CHECK:STDOUT: %ptr.40dc71.2: type = ptr_type %C.13320f.2 [symbolic] -// CHECK:STDOUT: %require_complete.0b0: = require_complete_type %ptr.40dc71.2 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.f337bc.2: = impl_witness imports.%Destroy.impl_witness_table.458, @C.as.Destroy.impl(%X) [symbolic] -// CHECK:STDOUT: %pattern_type.2a1e48.2: type = pattern_type %ptr.40dc71.2 [symbolic] +// CHECK:STDOUT: %.6b6: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.886 [symbolic] +// CHECK:STDOUT: %impl.elem0.adb: %.6b6 = impl_witness_access %Destroy.lookup_impl_witness.5ce, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.833: = specific_impl_function %impl.elem0.adb, @Destroy.Op(%Destroy.facet.886) [symbolic] +// CHECK:STDOUT: %ptr.40d: type = ptr_type %C.13320f.2 [symbolic] +// CHECK:STDOUT: %require_complete.0b0: = require_complete_type %ptr.40d [symbolic] // CHECK:STDOUT: %I.impl_witness.a00: = impl_witness imports.%I.impl_witness_table, @C.as.I.impl(%empty_tuple) [concrete] // CHECK:STDOUT: %C.as.I.impl.F.type.3d38e7.1: type = fn_type @C.as.I.impl.F.1, @C.as.I.impl(%empty_tuple) [concrete] // CHECK:STDOUT: %C.as.I.impl.F.1dded6.1: %C.as.I.impl.F.type.3d38e7.1 = struct_value () [concrete] @@ -491,15 +407,18 @@ fn G() { // CHECK:STDOUT: %pattern_type.186: type = pattern_type %C.607 [concrete] // CHECK:STDOUT: %C.as.I.impl.F.specific_fn.9d8118.2: = specific_function %C.as.I.impl.F.1dded6.1, @C.as.I.impl.F.1(%empty_tuple) [concrete] // CHECK:STDOUT: %C.val.12f: %C.607 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.de6: = impl_witness imports.%Destroy.impl_witness_table.458, @C.as.Destroy.impl(%empty_tuple) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.848: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%empty_tuple) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.c7e: %C.as.Destroy.impl.Op.type.848 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.facet.65f: %Destroy.type = facet_value %C.607, (%Destroy.impl_witness.de6) [concrete] -// CHECK:STDOUT: %.fa0: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.65f [concrete] +// CHECK:STDOUT: %AggregateT: %type_where = bind_symbolic_name AggregateT, 0 [symbolic] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.3ba: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%AggregateT) [symbolic] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.736: %AggregateT.as_type.as.Destroy.impl.Op.type.3ba = struct_value () [symbolic] +// CHECK:STDOUT: %facet_value.637: %type_where = facet_value %C.607, () [concrete] +// CHECK:STDOUT: %Destroy.impl_witness.b37: = impl_witness imports.%Destroy.impl_witness_table.d2f, @AggregateT.as_type.as.Destroy.impl(%facet_value.637) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.30b: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.637) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.e24: %AggregateT.as_type.as.Destroy.impl.Op.type.30b = struct_value () [concrete] // CHECK:STDOUT: %ptr.2ce: type = ptr_type %C.607 [concrete] -// CHECK:STDOUT: %pattern_type.947: type = pattern_type %ptr.2ce [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.003: = specific_function %C.as.Destroy.impl.Op.c7e, @C.as.Destroy.impl.Op(%empty_tuple) [concrete] // CHECK:STDOUT: %complete_type.e2c: = complete_type_witness %ptr.2ce [concrete] +// CHECK:STDOUT: %Destroy.facet.fc9: %Destroy.type = facet_value %C.607, (%Destroy.impl_witness.b37) [concrete] +// CHECK:STDOUT: %.4a1: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.fc9 [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.e24, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.637) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -527,14 +446,9 @@ fn G() { // CHECK:STDOUT: %Main.import_ref.eb1c17.3: %empty_tuple.type = import_ref Main//b, loc7_14, loaded [symbolic = @C.as.I.impl.%Y (constants.%Y)] // CHECK:STDOUT: %Main.import_ref.eb1c17.4: %empty_tuple.type = import_ref Main//b, loc7_14, loaded [symbolic = @C.as.I.impl.%Y (constants.%Y)] // CHECK:STDOUT: %Main.F.162: @C.as.I.impl.%C.as.I.impl.F.type.1 (%C.as.I.impl.F.type.a1f290.1) = import_ref Main//b, F, loaded [symbolic = @C.as.I.impl.%C.as.I.impl.F.1 (constants.%C.as.I.impl.F.e1c928.1)] -// CHECK:STDOUT: %Main.import_ref.21d: = import_ref Main//b, loc5_17, loaded [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.f337bc.2)] -// CHECK:STDOUT: %Main.import_ref.eb1c17.5: %empty_tuple.type = import_ref Main//b, loc5_9, loaded [symbolic = @C.%X (constants.%X)] -// CHECK:STDOUT: %Main.import_ref.94a: type = import_ref Main//b, loc5_17, loaded [symbolic = @C.as.Destroy.impl.%C (constants.%C.13320f.1)] -// CHECK:STDOUT: %Main.import_ref.e45: type = import_ref Main//b, inst37 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.973: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.68cd87.1) = import_ref Main//b, loc5_17, loaded [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.5a4f36.1)] -// CHECK:STDOUT: %Destroy.impl_witness_table.458 = impl_witness_table (%Main.import_ref.973), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Main.import_ref.eb1c17.6: %empty_tuple.type = import_ref Main//b, loc5_9, loaded [symbolic = @C.%X (constants.%X)] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] +// CHECK:STDOUT: %Main.import_ref.026: @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op.type (%AggregateT.as_type.as.Destroy.impl.Op.type.3ba) = import_ref Main//b, inst200 [indirect], loaded [symbolic = @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op (constants.%AggregateT.as_type.as.Destroy.impl.Op.736)] +// CHECK:STDOUT: %Destroy.impl_witness_table.d2f = impl_witness_table (%Main.import_ref.026), @AggregateT.as_type.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -547,6 +461,8 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C.607, () [concrete = constants.%facet_value.637] +// CHECK:STDOUT: %.1: %type_where = converted constants.%C.607, %facet_value [concrete = constants.%facet_value.637] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I [from "a.carbon"] { @@ -573,21 +489,6 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(imports.%Main.import_ref.eb1c17.5: %empty_tuple.type) [from "b.carbon"] { -// CHECK:STDOUT: %X: %empty_tuple.type = bind_symbolic_name X, 0 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%X) [symbolic = %C (constants.%C.13320f.1)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.458, @C.as.Destroy.impl(%X) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.f337bc.2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%X) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.68cd87.1)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.68cd87.1) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.5a4f36.1)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%Main.import_ref.94a as imports.%Main.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.21d -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.eb1c17.1: %empty_tuple.type) [from "b.carbon"] { // CHECK:STDOUT: %X: %empty_tuple.type = bind_symbolic_name X, 0 [symbolic = %X (constants.%X)] // CHECK:STDOUT: @@ -628,11 +529,13 @@ fn G() { // CHECK:STDOUT: %.loc7_16.6: ref %C.607 = converted %.loc7_16.2, %.loc7_16.5 // CHECK:STDOUT: %.loc7_16.7: %C.607 = bind_value %.loc7_16.6 // CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %C.as.I.impl.F.specific_fn(%.loc7_16.7) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc7_16.5, constants.%C.as.Destroy.impl.Op.c7e -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function constants.%C.as.Destroy.impl.Op.c7e, @C.as.Destroy.impl.Op(constants.%empty_tuple) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.003] -// CHECK:STDOUT: %bound_method: = bound_method %.loc7_16.5, %C.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C.607, () [concrete = constants.%facet_value.637] +// CHECK:STDOUT: %.loc7_16.8: %type_where = converted constants.%C.607, %facet_value [concrete = constants.%facet_value.637] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc7_16.5, constants.%AggregateT.as_type.as.Destroy.impl.Op.e24 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.e24, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.637) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc7_16.5, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.2ce = addr_of %.loc7_16.5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -660,29 +563,18 @@ fn G() { // CHECK:STDOUT: %C: type = class_type @C, @C(%Y) [symbolic = %C (constants.%C.13320f.2)] // CHECK:STDOUT: %require_complete.1: = require_complete_type %C [symbolic = %require_complete.1 (constants.%require_complete.a35)] // CHECK:STDOUT: %C.val: @C.as.I.impl.F.2.%C (%C.13320f.2) = struct_value () [symbolic = %C.val (constants.%C.val.56a)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.458, @C.as.Destroy.impl(%Y) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.f337bc.1)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %C, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.5f3)] -// CHECK:STDOUT: %.1: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.1 (constants.%.a90)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Y) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.68cd87.2)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.I.impl.F.2.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.68cd87.2) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.5a4f36.2)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function %C.as.Destroy.impl.Op, @C.as.Destroy.impl.Op(%Y) [symbolic = %C.as.Destroy.impl.Op.specific_fn (constants.%C.as.Destroy.impl.Op.specific_fn.769)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.40dc71.2)] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [symbolic = %facet_value (constants.%facet_value.2c0)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %C, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.5ce)] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %C, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.886)] +// CHECK:STDOUT: %.1: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.1 (constants.%.6b6)] +// CHECK:STDOUT: %impl.elem0: @C.as.I.impl.F.2.%.1 (%.6b6) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0 (constants.%impl.elem0.adb)] +// CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @Destroy.Op(%Destroy.facet) [symbolic = %specific_impl_fn (constants.%specific_impl_fn.833)] +// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.40d)] // CHECK:STDOUT: %require_complete.2: = require_complete_type %ptr [symbolic = %require_complete.2 (constants.%require_complete.0b0)] // CHECK:STDOUT: // CHECK:STDOUT: fn [thunk imports.%Main.F.162]; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(imports.%Main.import_ref.eb1c17.6: %empty_tuple.type) [from "b.carbon"] { -// CHECK:STDOUT: %X: %empty_tuple.type = bind_symbolic_name X, 0 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%X) [symbolic = %C (constants.%C.13320f.1)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.40dc71.1)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.2a1e48.1)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%X) { // CHECK:STDOUT: %X => constants.%X // CHECK:STDOUT: } @@ -724,36 +616,6 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl.F.2(constants.%Y) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%Y) { -// CHECK:STDOUT: %X => constants.%Y -// CHECK:STDOUT: %C => constants.%C.13320f.2 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.f337bc.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.68cd87.2 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.5a4f36.2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%X) { -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %C => constants.%C.13320f.1 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.f337bc.2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%Y) { -// CHECK:STDOUT: %X => constants.%Y -// CHECK:STDOUT: %C => constants.%C.13320f.2 -// CHECK:STDOUT: %ptr => constants.%ptr.40dc71.2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2a1e48.2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%X) { -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %C => constants.%C.13320f.1 -// CHECK:STDOUT: %ptr => constants.%ptr.40dc71.1 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2a1e48.1 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.I.impl(constants.%empty_tuple) { // CHECK:STDOUT: %Y => constants.%empty_tuple // CHECK:STDOUT: %C => constants.%C.607 @@ -775,12 +637,12 @@ fn G() { // CHECK:STDOUT: %C => constants.%C.607 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.357 // CHECK:STDOUT: %C.val => constants.%C.val.12f -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.de6 -// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.65f -// CHECK:STDOUT: %.1 => constants.%.fa0 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.848 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.c7e -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn => constants.%C.as.Destroy.impl.Op.specific_fn.003 +// CHECK:STDOUT: %facet_value => constants.%facet_value.637 +// CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%Destroy.impl_witness.b37 +// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.fc9 +// CHECK:STDOUT: %.1 => constants.%.4a1 +// CHECK:STDOUT: %impl.elem0 => constants.%AggregateT.as_type.as.Destroy.impl.Op.e24 +// CHECK:STDOUT: %specific_impl_fn => constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %ptr => constants.%ptr.2ce // CHECK:STDOUT: %require_complete.2 => constants.%complete_type.e2c // CHECK:STDOUT: } @@ -794,20 +656,3 @@ fn G() { // CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%empty_tuple) { -// CHECK:STDOUT: %X => constants.%empty_tuple -// CHECK:STDOUT: %C => constants.%C.607 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.de6 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.848 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.c7e -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%empty_tuple) { -// CHECK:STDOUT: %X => constants.%empty_tuple -// CHECK:STDOUT: %C => constants.%C.607 -// CHECK:STDOUT: %ptr => constants.%ptr.2ce -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.947 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/interface_args.carbon b/toolchain/check/testdata/impl/interface_args.carbon index 0ca567452236..279e6b359c60 100644 --- a/toolchain/check/testdata/impl/interface_args.carbon +++ b/toolchain/check/testdata/impl/interface_args.carbon @@ -216,34 +216,17 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.generic: %Action.type.29c = struct_value () [concrete] // CHECK:STDOUT: %Action.type.aff: type = facet_type <@Action, @Action(%T)> [symbolic] // CHECK:STDOUT: %Self.2f4: %Action.type.aff = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Self.as_type.d4e: type = facet_access_type %Self.2f4 [symbolic] -// CHECK:STDOUT: %pattern_type.b60: type = pattern_type %Self.as_type.d4e [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.2f4 [symbolic] +// CHECK:STDOUT: %pattern_type.b60: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Action.Op.type.036: type = fn_type @Action.Op, @Action(%T) [symbolic] // CHECK:STDOUT: %Action.Op.6ed: %Action.Op.type.036 = struct_value () [symbolic] // CHECK:STDOUT: %Action.assoc_type.32e: type = assoc_entity_type @Action, @Action(%T) [symbolic] // CHECK:STDOUT: %assoc0.268: %Action.assoc_type.32e = assoc_entity element0, @Action.%Action.Op.decl [symbolic] // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.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: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Action.type.74f: type = facet_type <@Action, @Action(%B)> [concrete] // CHECK:STDOUT: %Self.4b7: %Action.type.74f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Action.Op.type.54d: type = fn_type @Action.Op, @Action(%B) [concrete] @@ -262,11 +245,9 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -323,14 +304,14 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %self.patt: @Action.Op.%pattern_type (%pattern_type.b60) = binding_pattern self [concrete] // CHECK:STDOUT: %self.param_patt: @Action.Op.%pattern_type (%pattern_type.b60) = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Action.Op.%Self.as_type.loc5_15.1 (%Self.as_type.d4e) = value_param call_param0 -// CHECK:STDOUT: %.loc5_15.1: type = splice_block %.loc5_15.3 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type.d4e)] { +// CHECK:STDOUT: %self.param: @Action.Op.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc5_15.1: type = splice_block %.loc5_15.3 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] { // CHECK:STDOUT: %.loc5_15.2: @Action.Op.%Action.type (%Action.type.aff) = specific_constant @Action.%Self.1, @Action(constants.%T) [symbolic = %Self (constants.%Self.2f4)] // CHECK:STDOUT: %Self.ref: @Action.Op.%Action.type (%Action.type.aff) = name_ref Self, %.loc5_15.2 [symbolic = %Self (constants.%Self.2f4)] -// CHECK:STDOUT: %Self.as_type.loc5_15.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type.d4e)] -// CHECK:STDOUT: %.loc5_15.3: type = converted %Self.ref, %Self.as_type.loc5_15.2 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type.d4e)] +// CHECK:STDOUT: %Self.as_type.loc5_15.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc5_15.3: type = converted %Self.ref, %Self.as_type.loc5_15.2 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Action.Op.%Self.as_type.loc5_15.1 (%Self.as_type.d4e) = bind_name self, %self.param +// CHECK:STDOUT: %self: @Action.Op.%Self.as_type.loc5_15.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0.loc5_22.1: @Action.%Action.assoc_type (%Action.assoc_type.32e) = assoc_entity element0, %Action.Op.decl [symbolic = %assoc0.loc5_22.2 (constants.%assoc0.268)] // CHECK:STDOUT: @@ -341,54 +322,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c10 = binding_pattern self [concrete] @@ -405,10 +338,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -417,10 +346,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -429,10 +354,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -444,18 +365,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.aff)] // CHECK:STDOUT: %Self: @Action.Op.%Action.type (%Action.type.aff) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2f4)] -// CHECK:STDOUT: %Self.as_type.loc5_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type.d4e)] +// CHECK:STDOUT: %Self.as_type.loc5_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_15.1 [symbolic = %pattern_type (constants.%pattern_type.b60)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Action.Op.%Self.as_type.loc5_15.1 (%Self.as_type.d4e)); +// CHECK:STDOUT: fn(%self.param: @Action.Op.%Self.as_type.loc5_15.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @A.as.Action.impl.Op(%self.param: %A) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return @@ -483,7 +398,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Action.type => constants.%Action.type.aff // CHECK:STDOUT: %Self => constants.%Self.2f4 -// CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%Self.as_type.d4e +// CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.b60 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -510,12 +425,9 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: --- action.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %A: type = class_type @A [concrete] +// CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %Action.type.29c: type = generic_interface_type @Action [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Action.generic: %Action.type.29c = struct_value () [concrete] @@ -523,6 +435,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.type.aff: type = facet_type <@Action, @Action(%T)> [symbolic] // CHECK:STDOUT: %Self.2f4: %Action.type.aff = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Action.type.74f: type = facet_type <@Action, @Action(%B)> [concrete] +// CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %Action.Op.type.036: type = fn_type @Action.Op, @Action(%T) [symbolic] // CHECK:STDOUT: %Action.Op.6ed: %Action.Op.type.036 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.2f4 [symbolic] @@ -551,33 +464,19 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Main.B: type = import_ref Main//action, B, loaded [concrete = constants.%B] // CHECK:STDOUT: %Main.C = import_ref Main//action, C, unloaded // CHECK:STDOUT: %Main.F = import_ref Main//action, F, unloaded -// CHECK:STDOUT: %Core.ece: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Main.import_ref.57f = import_ref Main//action, loc8_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//action, loc8_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//action, inst61 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.e1c: type = import_ref Main//action, loc8_9, loaded [concrete = constants.%A] -// CHECK:STDOUT: %Main.import_ref.e45cb5.1: type = import_ref Main//action, inst64 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.7f2 = import_ref Main//action, loc8_9, unloaded -// CHECK:STDOUT: %Main.import_ref.0de = import_ref Main//action, loc9_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//action, loc9_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//action, inst105 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.0e2: type = import_ref Main//action, loc9_9, loaded [concrete = constants.%B] -// CHECK:STDOUT: %Main.import_ref.e45cb5.2: type = import_ref Main//action, inst64 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.f4b = import_ref Main//action, loc9_9, unloaded -// CHECK:STDOUT: %Main.import_ref.3e8 = import_ref Main//action, loc10_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//action, loc10_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.2c4 = import_ref Main//action, inst125 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.0ed: type = import_ref Main//action, loc10_9, loaded [concrete = constants.%C] -// CHECK:STDOUT: %Main.import_ref.e45cb5.3: type = import_ref Main//action, inst64 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.96a = import_ref Main//action, loc10_9, unloaded +// CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//action, loc9_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//action, inst66 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//action, loc4_18, loaded [symbolic = @Action.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.489 = import_ref Main//action, inst30 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.c55: @Action.%Action.assoc_type (%Action.assoc_type.32e) = import_ref Main//action, loc5_22, loaded [symbolic = @Action.%assoc0 (constants.%assoc0.f18741.2)] -// CHECK:STDOUT: %Main.Op.ae2 = import_ref Main//action, Op, unloaded +// CHECK:STDOUT: %Main.Op = import_ref Main//action, Op, unloaded // CHECK:STDOUT: %Main.import_ref.c2f: = import_ref Main//action, loc12_21, loaded [concrete = constants.%Action.impl_witness] +// CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//action, loc8_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//action, inst61 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.984: type = import_ref Main//action, loc12_6, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.import_ref.99f: type = import_ref Main//action, loc12_19, loaded [concrete = constants.%Action.type.74f] // CHECK:STDOUT: %Main.import_ref.8c4 = import_ref Main//action, loc13_23, unloaded @@ -597,7 +496,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .B = imports.%Main.B // CHECK:STDOUT: .C = imports.%Main.C // CHECK:STDOUT: .F = imports.%Main.F -// CHECK:STDOUT: .Core = imports.%Core.ece +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: } // CHECK:STDOUT: %default.import.loc2_22.1 = import @@ -628,53 +527,28 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.489 // CHECK:STDOUT: .Op = imports.%Main.import_ref.c55 -// CHECK:STDOUT: witness = (imports.%Main.Op.ae2) +// CHECK:STDOUT: witness = (imports.%Main.Op) // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: imports.%Main.import_ref.e1c as imports.%Main.import_ref.e45cb5.1 [from "action.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.7f2 -// CHECK:STDOUT: witness = imports.%Main.import_ref.57f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: imports.%Main.import_ref.0e2 as imports.%Main.import_ref.e45cb5.2 [from "action.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.f4b -// CHECK:STDOUT: witness = imports.%Main.import_ref.0de -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: imports.%Main.import_ref.0ed as imports.%Main.import_ref.e45cb5.3 [from "action.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.96a -// CHECK:STDOUT: witness = imports.%Main.import_ref.3e8 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @A.as.Action.impl: imports.%Main.import_ref.984 as imports.%Main.import_ref.99f [from "action.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Op = imports.%Main.import_ref.8c4 // CHECK:STDOUT: witness = imports.%Main.import_ref.c2f // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @A [from "action.carbon"] { -// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.da3 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @B [from "action.carbon"] { -// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.2 +// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.1 // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.54a // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @C [from "action.carbon"] { -// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.3 +// CHECK:STDOUT: class @A [from "action.carbon"] { +// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.2 // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.2c4 +// CHECK:STDOUT: .Self = imports.%Main.import_ref.da3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Action.Op(imports.%Main.import_ref.5ab3ec.2: type, imports.%Main.import_ref.5ae: @Action.%Action.type (%Action.type.aff)) [from "action.carbon"] { @@ -730,18 +604,16 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: --- fail_action.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %A: type = class_type @A [concrete] +// CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %Action.type.29c: type = generic_interface_type @Action [concrete] // CHECK:STDOUT: %Action.generic: %Action.type.29c = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Action.type.aff: type = facet_type <@Action, @Action(%T)> [symbolic] // CHECK:STDOUT: %Self.2f4: %Action.type.aff = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Action.type.74f: type = facet_type <@Action, @Action(%B)> [concrete] +// CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %Action.Op.type.036: type = fn_type @Action.Op, @Action(%T) [symbolic] // CHECK:STDOUT: %Action.Op.6ed: %Action.Op.type.036 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.2f4 [symbolic] @@ -756,6 +628,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [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] // CHECK:STDOUT: %Action.type.eec: type = facet_type <@Action, @Action(%C)> [concrete] // CHECK:STDOUT: %Self.978: %Action.type.eec = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Action.Op.type.5ad: type = fn_type @Action.Op, @Action(%C) [concrete] @@ -771,33 +644,19 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Main.B = import_ref Main//action, B, unloaded // CHECK:STDOUT: %Main.C: type = import_ref Main//action, C, loaded [concrete = constants.%C] // CHECK:STDOUT: %Main.F = import_ref Main//action, F, unloaded -// CHECK:STDOUT: %Core.ece: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Main.import_ref.57f = import_ref Main//action, loc8_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//action, loc8_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//action, inst61 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.e1c: type = import_ref Main//action, loc8_9, loaded [concrete = constants.%A] -// CHECK:STDOUT: %Main.import_ref.e45cb5.1: type = import_ref Main//action, inst64 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.7f2 = import_ref Main//action, loc8_9, unloaded -// CHECK:STDOUT: %Main.import_ref.0de = import_ref Main//action, loc9_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//action, loc9_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//action, inst105 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.0e2: type = import_ref Main//action, loc9_9, loaded [concrete = constants.%B] -// CHECK:STDOUT: %Main.import_ref.e45cb5.2: type = import_ref Main//action, inst64 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.f4b = import_ref Main//action, loc9_9, unloaded -// CHECK:STDOUT: %Main.import_ref.3e8 = import_ref Main//action, loc10_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//action, loc10_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.2c4 = import_ref Main//action, inst125 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.0ed: type = import_ref Main//action, loc10_9, loaded [concrete = constants.%C] -// CHECK:STDOUT: %Main.import_ref.e45cb5.3: type = import_ref Main//action, inst64 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.96a = import_ref Main//action, loc10_9, unloaded +// CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//action, loc9_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//action, inst66 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//action, loc4_18, loaded [symbolic = @Action.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.489 = import_ref Main//action, inst30 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.c55: @Action.%Action.assoc_type (%Action.assoc_type.32e) = import_ref Main//action, loc5_22, loaded [symbolic = @Action.%assoc0 (constants.%assoc0.f18)] -// CHECK:STDOUT: %Main.Op.ae2 = import_ref Main//action, Op, unloaded +// CHECK:STDOUT: %Main.Op = import_ref Main//action, Op, unloaded // CHECK:STDOUT: %Main.import_ref.7bf = import_ref Main//action, loc12_21, unloaded +// CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//action, loc8_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//action, inst61 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.984: type = import_ref Main//action, loc12_6, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.import_ref.99f: type = import_ref Main//action, loc12_19, loaded [concrete = constants.%Action.type.74f] // CHECK:STDOUT: %Main.import_ref.8c4 = import_ref Main//action, loc13_23, unloaded @@ -805,6 +664,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Main.import_ref.5ae: @Action.%Action.type (%Action.type.aff) = import_ref Main//action, inst30 [no loc], loaded [symbolic = @Action.%Self (constants.%Self.2f4)] // CHECK:STDOUT: %Main.import_ref.1f6: @Action.%Action.Op.type (%Action.Op.type.036) = import_ref Main//action, loc5_22, loaded [symbolic = @Action.%Action.Op (constants.%Action.Op.6ed)] // CHECK:STDOUT: %Main.import_ref.0e3753.1 = import_ref Main//action, loc5_22, unloaded +// CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//action, loc10_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.2c4 = import_ref Main//action, inst69 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.0e3753.2 = import_ref Main//action, loc5_22, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: @@ -815,7 +676,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .B = imports.%Main.B // CHECK:STDOUT: .C = imports.%Main.C // CHECK:STDOUT: .F = imports.%Main.F -// CHECK:STDOUT: .Core = imports.%Core.ece +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: } // CHECK:STDOUT: %default.import.loc2_22.1 = import @@ -846,46 +707,28 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.489 // CHECK:STDOUT: .Op = imports.%Main.import_ref.c55 -// CHECK:STDOUT: witness = (imports.%Main.Op.ae2) +// CHECK:STDOUT: witness = (imports.%Main.Op) // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: imports.%Main.import_ref.e1c as imports.%Main.import_ref.e45cb5.1 [from "action.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.7f2 -// CHECK:STDOUT: witness = imports.%Main.import_ref.57f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: imports.%Main.import_ref.0e2 as imports.%Main.import_ref.e45cb5.2 [from "action.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.f4b -// CHECK:STDOUT: witness = imports.%Main.import_ref.0de -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: imports.%Main.import_ref.0ed as imports.%Main.import_ref.e45cb5.3 [from "action.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.96a -// CHECK:STDOUT: witness = imports.%Main.import_ref.3e8 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @A.as.Action.impl: imports.%Main.import_ref.984 as imports.%Main.import_ref.99f [from "action.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Op = imports.%Main.import_ref.8c4 // CHECK:STDOUT: witness = imports.%Main.import_ref.7bf // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @A [from "action.carbon"] { +// CHECK:STDOUT: class @B [from "action.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.1 // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.da3 +// CHECK:STDOUT: .Self = imports.%Main.import_ref.54a // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @B [from "action.carbon"] { +// CHECK:STDOUT: class @A [from "action.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.2 // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.54a +// CHECK:STDOUT: .Self = imports.%Main.import_ref.da3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C [from "action.carbon"] { @@ -968,27 +811,15 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.Make.737: %Factory.Make.type.598 = struct_value () [symbolic] // CHECK:STDOUT: %Factory.assoc_type.207: type = assoc_entity_type @Factory, @Factory(%T) [symbolic] // CHECK:STDOUT: %assoc0.b3c: %Factory.assoc_type.207 = assoc_entity element0, @Factory.%Factory.Make.decl [symbolic] -// CHECK:STDOUT: %Self.as_type.307: type = facet_access_type %Self.f7c [symbolic] -// CHECK:STDOUT: %pattern_type.e2d: type = pattern_type %Self.as_type.307 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.f7c [symbolic] +// CHECK:STDOUT: %pattern_type.e2d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Factory.Method.type.7ee: type = fn_type @Factory.Method, @Factory(%T) [symbolic] // CHECK:STDOUT: %Factory.Method.a71: %Factory.Method.type.7ee = struct_value () [symbolic] // CHECK:STDOUT: %assoc1.e30: %Factory.assoc_type.207 = assoc_entity element1, @Factory.%Factory.Method.decl [symbolic] // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.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: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Factory.type.3cb: type = facet_type <@Factory, @Factory(%B)> [concrete] // CHECK:STDOUT: %Self.145: %Factory.type.3cb = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Factory.Make.type.c59: type = fn_type @Factory.Make, @Factory(%B) [concrete] @@ -1010,11 +841,9 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1075,14 +904,14 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %return.param_patt: @Factory.Method.%pattern_type.loc8_27 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Factory.%T.loc4_19.2 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %self.param: @Factory.Method.%Self.as_type.loc8_19.1 (%Self.as_type.307) = value_param call_param0 -// CHECK:STDOUT: %.loc8_19.1: type = splice_block %.loc8_19.3 [symbolic = %Self.as_type.loc8_19.1 (constants.%Self.as_type.307)] { +// CHECK:STDOUT: %self.param: @Factory.Method.%Self.as_type.loc8_19.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc8_19.1: type = splice_block %.loc8_19.3 [symbolic = %Self.as_type.loc8_19.1 (constants.%Self.as_type)] { // CHECK:STDOUT: %.loc8_19.2: @Factory.Method.%Factory.type (%Factory.type.82b) = specific_constant @Factory.%Self.1, @Factory(constants.%T) [symbolic = %Self (constants.%Self.f7c)] // CHECK:STDOUT: %Self.ref: @Factory.Method.%Factory.type (%Factory.type.82b) = name_ref Self, %.loc8_19.2 [symbolic = %Self (constants.%Self.f7c)] -// CHECK:STDOUT: %Self.as_type.loc8_19.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc8_19.1 (constants.%Self.as_type.307)] -// CHECK:STDOUT: %.loc8_19.3: type = converted %Self.ref, %Self.as_type.loc8_19.2 [symbolic = %Self.as_type.loc8_19.1 (constants.%Self.as_type.307)] +// CHECK:STDOUT: %Self.as_type.loc8_19.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc8_19.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc8_19.3: type = converted %Self.ref, %Self.as_type.loc8_19.2 [symbolic = %Self.as_type.loc8_19.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Factory.Method.%Self.as_type.loc8_19.1 (%Self.as_type.307) = bind_name self, %self.param +// CHECK:STDOUT: %self: @Factory.Method.%Self.as_type.loc8_19.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: %return.param: ref @Factory.Method.%T (%T) = out_param call_param1 // CHECK:STDOUT: %return: ref @Factory.Method.%T (%T) = return_slot %return.param // CHECK:STDOUT: } @@ -1097,38 +926,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.049 = return_slot_pattern [concrete] @@ -1160,10 +957,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1172,10 +965,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1194,17 +983,13 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.82b)] // CHECK:STDOUT: %Self: @Factory.Method.%Factory.type (%Factory.type.82b) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.f7c)] -// CHECK:STDOUT: %Self.as_type.loc8_19.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_19.1 (constants.%Self.as_type.307)] +// CHECK:STDOUT: %Self.as_type.loc8_19.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_19.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type.loc8_13: type = pattern_type %Self.as_type.loc8_19.1 [symbolic = %pattern_type.loc8_13 (constants.%pattern_type.e2d)] // CHECK:STDOUT: %pattern_type.loc8_27: type = pattern_type %T [symbolic = %pattern_type.loc8_27 (constants.%pattern_type.7dc)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Factory.Method.%Self.as_type.loc8_19.1 (%Self.as_type.307)) -> @Factory.Method.%T (%T); +// CHECK:STDOUT: fn(%self.param: @Factory.Method.%Self.as_type.loc8_19.1 (%Self.as_type)) -> @Factory.Method.%T (%T); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @A.as.Factory.impl.Make() -> %B; // CHECK:STDOUT: // CHECK:STDOUT: fn @A.as.Factory.impl.Method(%self.param: %A) -> %B; @@ -1222,7 +1007,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Factory.type => constants.%Factory.type.82b // CHECK:STDOUT: %Self => constants.%Self.f7c -// CHECK:STDOUT: %Self.as_type.loc8_19.1 => constants.%Self.as_type.307 +// CHECK:STDOUT: %Self.as_type.loc8_19.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.loc8_13 => constants.%pattern_type.e2d // CHECK:STDOUT: %pattern_type.loc8_27 => constants.%pattern_type.7dc // CHECK:STDOUT: } @@ -1259,17 +1044,16 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: --- factory.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %A: type = class_type @A [concrete] +// CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %Factory.type.1a8: type = generic_interface_type @Factory [concrete] // CHECK:STDOUT: %Factory.generic: %Factory.type.1a8 = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.82b: type = facet_type <@Factory, @Factory(%T)> [symbolic] // CHECK:STDOUT: %Self.f7c: %Factory.type.82b = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Factory.type.3cb: type = facet_type <@Factory, @Factory(%B)> [concrete] +// CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %Factory.Make.type.598: type = fn_type @Factory.Make, @Factory(%T) [symbolic] // CHECK:STDOUT: %Factory.Make.737: %Factory.Make.type.598 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] @@ -1310,22 +1094,12 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Main.Factory: %Factory.type.1a8 = import_ref Main//factory, Factory, loaded [concrete = constants.%Factory.generic] // CHECK:STDOUT: %Main.A: type = import_ref Main//factory, A, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.B: type = import_ref Main//factory, B, loaded [concrete = constants.%B] -// CHECK:STDOUT: %Core.ece: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Main.import_ref.57f = import_ref Main//factory, loc11_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//factory, loc11_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//factory, inst83 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.e1c: type = import_ref Main//factory, loc11_9, loaded [concrete = constants.%A] -// CHECK:STDOUT: %Main.import_ref.e45cb5.1: type = import_ref Main//factory, inst86 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.7f2 = import_ref Main//factory, loc11_9, unloaded -// CHECK:STDOUT: %Main.import_ref.0de = import_ref Main//factory, loc12_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//factory, loc12_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//factory, inst127 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.0e2: type = import_ref Main//factory, loc12_9, loaded [concrete = constants.%B] -// CHECK:STDOUT: %Main.import_ref.e45cb5.2: type = import_ref Main//factory, inst86 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.f4b = import_ref Main//factory, loc12_9, unloaded +// CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//factory, loc12_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//factory, inst88 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//factory, loc4_19, loaded [symbolic = @Factory.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.119 = import_ref Main//factory, inst30 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.46c: @Factory.%Factory.assoc_type (%Factory.assoc_type.207) = import_ref Main//factory, loc6_17, loaded [symbolic = @Factory.%assoc0 (constants.%assoc0.46d25f.2)] @@ -1333,6 +1107,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Main.Make = import_ref Main//factory, Make, unloaded // CHECK:STDOUT: %Main.Method = import_ref Main//factory, Method, unloaded // CHECK:STDOUT: %Main.import_ref.a6e: = import_ref Main//factory, loc14_22, loaded [concrete = constants.%Factory.impl_witness] +// CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//factory, loc11_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//factory, inst83 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.984: type = import_ref Main//factory, loc14_6, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.import_ref.e91: type = import_ref Main//factory, loc14_20, loaded [concrete = constants.%Factory.type.3cb] // CHECK:STDOUT: %Main.import_ref.22f = import_ref Main//factory, loc15_17, unloaded @@ -1357,7 +1133,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .Factory = imports.%Main.Factory // CHECK:STDOUT: .A = imports.%Main.A // CHECK:STDOUT: .B = imports.%Main.B -// CHECK:STDOUT: .Core = imports.%Core.ece +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .MakeB = %MakeB.decl // CHECK:STDOUT: .InstanceB = %InstanceB.decl // CHECK:STDOUT: } @@ -1410,18 +1186,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: imports.%Main.import_ref.e1c as imports.%Main.import_ref.e45cb5.1 [from "factory.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.7f2 -// CHECK:STDOUT: witness = imports.%Main.import_ref.57f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: imports.%Main.import_ref.0e2 as imports.%Main.import_ref.e45cb5.2 [from "factory.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.f4b -// CHECK:STDOUT: witness = imports.%Main.import_ref.0de -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @A.as.Factory.impl: imports.%Main.import_ref.984 as imports.%Main.import_ref.e91 [from "factory.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Make = imports.%Main.import_ref.22f @@ -1429,18 +1193,18 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: witness = imports.%Main.import_ref.a6e // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @A [from "factory.carbon"] { +// CHECK:STDOUT: class @B [from "factory.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.1 // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.da3 +// CHECK:STDOUT: .Self = imports.%Main.import_ref.54a // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @B [from "factory.carbon"] { +// CHECK:STDOUT: class @A [from "factory.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.2 // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.54a +// CHECK:STDOUT: .Self = imports.%Main.import_ref.da3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Factory.Make(imports.%Main.import_ref.5ab3ec.2: type, imports.%Main.import_ref.85368a.1: @Factory.%Factory.type (%Factory.type.82b)) [from "factory.carbon"] { @@ -1532,17 +1296,16 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: --- fail_factory.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %A: type = class_type @A [concrete] +// CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %Factory.type.1a8: type = generic_interface_type @Factory [concrete] // CHECK:STDOUT: %Factory.generic: %Factory.type.1a8 = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.82b: type = facet_type <@Factory, @Factory(%T)> [symbolic] // CHECK:STDOUT: %Self.f7c: %Factory.type.82b = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Factory.type.3cb: type = facet_type <@Factory, @Factory(%B)> [concrete] +// CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %Factory.Make.type.598: type = fn_type @Factory.Make, @Factory(%T) [symbolic] // CHECK:STDOUT: %Factory.Make.737: %Factory.Make.type.598 = struct_value () [symbolic] // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] @@ -1550,8 +1313,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %assoc0.fe4: %Factory.assoc_type.207 = assoc_entity element0, imports.%Main.import_ref.1aa [symbolic] // CHECK:STDOUT: %Factory.Method.type.7ee: type = fn_type @Factory.Method, @Factory(%T) [symbolic] // CHECK:STDOUT: %Factory.Method.a71: %Factory.Method.type.7ee = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.307: type = facet_access_type %Self.f7c [symbolic] -// CHECK:STDOUT: %pattern_type.e2d: type = pattern_type %Self.as_type.307 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.f7c [symbolic] +// CHECK:STDOUT: %pattern_type.e2d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %assoc1.ea6: %Factory.assoc_type.207 = assoc_entity element1, imports.%Main.import_ref.5be [symbolic] // CHECK:STDOUT: %Self.145: %Factory.type.3cb = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Factory.Make.type.c59: type = fn_type @Factory.Make, @Factory(%B) [concrete] @@ -1562,12 +1325,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.Method.ea9: %Factory.Method.type.117 = struct_value () [concrete] // CHECK:STDOUT: %assoc1.535: %Factory.assoc_type.579 = assoc_entity element1, imports.%Main.import_ref.46fc3c.1 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %MakeC.type: type = fn_type @MakeC [concrete] // CHECK:STDOUT: %MakeC: %MakeC.type = struct_value () [concrete] @@ -1591,24 +1348,13 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Main.Factory: %Factory.type.1a8 = import_ref Main//factory, Factory, loaded [concrete = constants.%Factory.generic] // CHECK:STDOUT: %Main.A: type = import_ref Main//factory, A, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.B = import_ref Main//factory, B, unloaded -// CHECK:STDOUT: %Core.ece: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//default // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Main.import_ref.57f = import_ref Main//factory, loc11_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//factory, loc11_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//factory, inst83 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.e1c: type = import_ref Main//factory, loc11_9, loaded [concrete = constants.%A] -// CHECK:STDOUT: %Main.import_ref.e45cb5.1: type = import_ref Main//factory, inst86 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.7f2 = import_ref Main//factory, loc11_9, unloaded -// CHECK:STDOUT: %Main.import_ref.0de = import_ref Main//factory, loc12_9, unloaded -// CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//factory, loc12_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//factory, inst127 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.0e2: type = import_ref Main//factory, loc12_9, loaded [concrete = constants.%B] -// CHECK:STDOUT: %Main.import_ref.e45cb5.2: type = import_ref Main//factory, inst86 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.f4b = import_ref Main//factory, loc12_9, unloaded +// CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//factory, loc12_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//factory, inst88 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//factory, loc4_19, loaded [symbolic = @Factory.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.119 = import_ref Main//factory, inst30 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.46c: @Factory.%Factory.assoc_type (%Factory.assoc_type.207) = import_ref Main//factory, loc6_17, loaded [symbolic = @Factory.%assoc0 (constants.%assoc0.46d)] @@ -1616,6 +1362,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Main.Make = import_ref Main//factory, Make, unloaded // CHECK:STDOUT: %Main.Method = import_ref Main//factory, Method, unloaded // CHECK:STDOUT: %Main.import_ref.42c = import_ref Main//factory, loc14_22, unloaded +// CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//factory, loc11_10, loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//factory, inst83 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.984: type = import_ref Main//factory, loc14_6, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.import_ref.e91: type = import_ref Main//factory, loc14_20, loaded [concrete = constants.%Factory.type.3cb] // CHECK:STDOUT: %Main.import_ref.22f = import_ref Main//factory, loc15_17, unloaded @@ -1628,7 +1376,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Main.import_ref.5be: @Factory.%Factory.Method.type (%Factory.Method.type.7ee) = import_ref Main//factory, loc8_31, loaded [symbolic = @Factory.%Factory.Method (constants.%Factory.Method.a71)] // CHECK:STDOUT: %Main.import_ref.21018a.1 = import_ref Main//factory, loc6_17, unloaded // CHECK:STDOUT: %Main.import_ref.46fc3c.1 = import_ref Main//factory, loc8_31, unloaded -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Main.import_ref.21018a.2 = import_ref Main//factory, loc6_17, unloaded // CHECK:STDOUT: %Main.import_ref.46fc3c.2 = import_ref Main//factory, loc8_31, unloaded // CHECK:STDOUT: } @@ -1638,7 +1385,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .Factory = imports.%Main.Factory // CHECK:STDOUT: .A = imports.%Main.A // CHECK:STDOUT: .B = imports.%Main.B -// CHECK:STDOUT: .Core = imports.%Core.ece +// CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .C = %C.decl // CHECK:STDOUT: .MakeC = %MakeC.decl // CHECK:STDOUT: .InstanceC = %InstanceC.decl @@ -1693,18 +1440,6 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: imports.%Main.import_ref.e1c as imports.%Main.import_ref.e45cb5.1 [from "factory.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.7f2 -// CHECK:STDOUT: witness = imports.%Main.import_ref.57f -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: imports.%Main.import_ref.0e2 as imports.%Main.import_ref.e45cb5.2 [from "factory.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = imports.%Main.import_ref.f4b -// CHECK:STDOUT: witness = imports.%Main.import_ref.0de -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @A.as.Factory.impl: imports.%Main.import_ref.984 as imports.%Main.import_ref.e91 [from "factory.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Make = imports.%Main.import_ref.22f @@ -1712,41 +1447,21 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: witness = imports.%Main.import_ref.42c // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @A [from "factory.carbon"] { -// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%Main.import_ref.da3 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @B [from "factory.carbon"] { -// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.2 +// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.1 // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.54a // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: class @A [from "factory.carbon"] { +// CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8f24d3.2 +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = imports.%Main.import_ref.da3 +// CHECK:STDOUT: } +// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1765,15 +1480,13 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.82b)] // CHECK:STDOUT: %Self: @Factory.Method.%Factory.type (%Factory.type.82b) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.f7c)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.307)] +// 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.e2d)] // CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @MakeC() -> %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Main.A [concrete = constants.%A] @@ -1824,7 +1537,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Factory.type => constants.%Factory.type.82b // CHECK:STDOUT: %Self => constants.%Self.f7c -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.307 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.e2d // CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon b/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon index 9f888d4612f7..8bb17d98e352 100644 --- a/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon +++ b/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon @@ -105,19 +105,19 @@ fn G() { // CHECK:STDOUT: %C.as.J.impl.JJ.type: type = fn_type @C.as.J.impl.JJ [concrete] // CHECK:STDOUT: %C.as.J.impl.JJ: %C.as.J.impl.JJ.type = struct_value () [concrete] // CHECK:STDOUT: %J.facet.5ad: %J.type = facet_value %C, (%J.impl_witness) [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.97e: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.8e6: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.663: type = pattern_type %ptr.8e6 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.be8: type = fn_type_with_self_type %J.JJ.type, %J.facet.5ad [concrete] -// CHECK:STDOUT: %facet_value: %facet_type = facet_value %C, (%I.impl_witness, %J.impl_witness) [concrete] -// CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%facet_value) [concrete] +// CHECK:STDOUT: %facet_value.d36: %facet_type = facet_value %C, (%I.impl_witness, %J.impl_witness) [concrete] +// CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%facet_value.d36) [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.c6b: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb1: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.c6b) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.f2c: %AggregateT.as_type.as.Destroy.impl.Op.type.cb1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.8e6: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.f2c, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.c6b) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -247,22 +247,6 @@ fn G() { // CHECK:STDOUT: witness = @C.%J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.663 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.663 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc30: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.8e6 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.8e6 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -276,11 +260,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (@C.as.J.impl.%C.as.J.impl.JJ.decl), @C.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.97e] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -392,9 +372,9 @@ fn G() { // CHECK:STDOUT: %.loc40_75: type = converted %.loc40_71, %as_type.loc40_75 [concrete = constants.%C] // CHECK:STDOUT: %JJ.ref: %J.assoc_type = name_ref JJ, @J.%assoc0 [concrete = constants.%assoc0.78c] // CHECK:STDOUT: %impl.elem0: %.be8 = impl_witness_access constants.%J.impl_witness, element0 [concrete = constants.%C.as.J.impl.JJ] -// CHECK:STDOUT: %bound_method: = bound_method %.loc40_8.1, %impl.elem0 +// CHECK:STDOUT: %bound_method.loc40_77: = bound_method %.loc40_8.1, %impl.elem0 // CHECK:STDOUT: %.loc40_8.2: %C = bind_value %.loc40_8.1 -// CHECK:STDOUT: %C.as.J.impl.JJ.call: init %empty_tuple.type = call %bound_method(%.loc40_8.2) +// CHECK:STDOUT: %C.as.J.impl.JJ.call: init %empty_tuple.type = call %bound_method.loc40_77(%.loc40_8.2) // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] // CHECK:STDOUT: %C.ref.loc46_5: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc46_9.1: %empty_struct_type = struct_literal () @@ -403,21 +383,29 @@ fn G() { // CHECK:STDOUT: %.loc46_9.3: init %C = class_init (), %.loc46_9.2 [concrete = constants.%C.val] // CHECK:STDOUT: %.loc46_9.4: ref %C = temporary %.loc46_9.2, %.loc46_9.3 // CHECK:STDOUT: %.loc46_11.1: ref %C = converted %.loc46_9.1, %.loc46_9.4 -// CHECK:STDOUT: %facet_value.loc46_15.1: %facet_type = facet_value constants.%C, (constants.%I.impl_witness, constants.%J.impl_witness) [concrete = constants.%facet_value] -// 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: %facet_value.loc46_15.1: %facet_type = facet_value constants.%C, (constants.%I.impl_witness, constants.%J.impl_witness) [concrete = constants.%facet_value.d36] +// CHECK:STDOUT: %.loc46_15.1: %facet_type = converted %C.ref.loc46_5, %facet_value.loc46_15.1 [concrete = constants.%facet_value.d36] +// 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.d36] +// CHECK:STDOUT: %.loc46_15.2: %facet_type = converted constants.%C, %facet_value.loc46_15.2 [concrete = constants.%facet_value.d36] +// 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.d36] +// CHECK:STDOUT: %.loc46_15.3: %facet_type = converted constants.%C, %facet_value.loc46_15.3 [concrete = constants.%facet_value.d36] +// CHECK:STDOUT: %F.specific_fn: = specific_function %F.ref, @F(constants.%facet_value.d36) [concrete = constants.%F.specific_fn] // CHECK:STDOUT: %.loc46_11.2: %C = bind_value %.loc46_11.1 // CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn(%.loc46_11.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc46: = bound_method %.loc46_9.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc46_9: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.c6b] +// CHECK:STDOUT: %.loc46_9.5: %type_where = converted constants.%C, %facet_value.loc46_9 [concrete = constants.%facet_value.c6b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc46: = bound_method %.loc46_9.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.f2c +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.f2c, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.c6b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc46: = bound_method %.loc46_9.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc46: %ptr.8e6 = addr_of %.loc46_9.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc46: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound.loc46(%addr.loc46) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc40: = bound_method %.loc40_6.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc46: init %empty_tuple.type = call %bound_method.loc46(%addr.loc46) +// CHECK:STDOUT: %facet_value.loc40: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value.c6b] +// CHECK:STDOUT: %.loc40_6.5: %type_where = converted constants.%C, %facet_value.loc40 [concrete = constants.%facet_value.c6b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc40: = bound_method %.loc40_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.f2c +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.f2c, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.c6b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc40_6: = bound_method %.loc40_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc40: %ptr.8e6 = addr_of %.loc40_6.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc40: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound.loc40(%addr.loc40) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc40: init %empty_tuple.type = call %bound_method.loc40_6(%addr.loc40) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -431,8 +419,6 @@ fn G() { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.8e6) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @I.II(constants.%Self.7ee) { // CHECK:STDOUT: %Self => constants.%Self.7ee // CHECK:STDOUT: %Self.as_type.loc16_15.1 => constants.%Self.as_type.a67 @@ -469,13 +455,13 @@ fn G() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.893 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F(constants.%facet_value) { -// CHECK:STDOUT: %T.loc22_6.1 => constants.%facet_value +// CHECK:STDOUT: specific @F(constants.%facet_value.d36) { +// CHECK:STDOUT: %T.loc22_6.1 => constants.%facet_value.d36 // CHECK:STDOUT: %T.as_type.loc22_20.1 => constants.%C // CHECK:STDOUT: %pattern_type => constants.%pattern_type.893 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %require_complete => constants.%complete_type.357 // CHECK:STDOUT: %I.lookup_impl_witness => constants.%I.impl_witness // CHECK:STDOUT: %I.facet.loc26_18.2 => constants.%I.facet.0a4 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness diff --git a/toolchain/check/testdata/impl/lookup/generic.carbon b/toolchain/check/testdata/impl/lookup/generic.carbon index c1c4dfef489c..0cf0e3320387 100644 --- a/toolchain/check/testdata/impl/lookup/generic.carbon +++ b/toolchain/check/testdata/impl/lookup/generic.carbon @@ -588,9 +588,9 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete] -// CHECK:STDOUT: %Self.cb9: %HasF.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %Self.as_type.45c: type = facet_access_type %Self.cb9 [symbolic] -// CHECK:STDOUT: %pattern_type.85b: type = pattern_type %Self.as_type.45c [symbolic] +// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.85b: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %HasF.F.type: type = fn_type @HasF.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HasF.F: %HasF.F.type = struct_value () [concrete] @@ -603,13 +603,6 @@ fn G(x: A) { // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %HasF.impl_witness.e3c: = impl_witness file.%HasF.impl_witness_table, @C.as.HasF.impl(%T) [symbolic] @@ -632,11 +625,9 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -682,18 +673,18 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @HasF { -// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.cb9] +// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %HasF.F.decl: %HasF.F.type = fn_decl @HasF.F [concrete = constants.%HasF.F] { // CHECK:STDOUT: %self.patt: @HasF.F.%pattern_type (%pattern_type.85b) = binding_pattern self [concrete] // CHECK:STDOUT: %self.param_patt: @HasF.F.%pattern_type (%pattern_type.85b) = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type.45c) = value_param call_param0 -// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.45c)] { -// CHECK:STDOUT: %Self.ref: %HasF.type = name_ref Self, @HasF.%Self [symbolic = %Self (constants.%Self.cb9)] -// CHECK:STDOUT: %Self.as_type.loc5_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.45c)] -// CHECK:STDOUT: %.loc5_14.2: type = converted %Self.ref, %Self.as_type.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.45c)] +// CHECK:STDOUT: %self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { +// CHECK:STDOUT: %Self.ref: %HasF.type = name_ref Self, @HasF.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc5_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc5_14.2: type = converted %Self.ref, %Self.as_type.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type.45c) = bind_name self, %self.param +// CHECK:STDOUT: %self: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, %HasF.F.decl [concrete = constants.%assoc0] // CHECK:STDOUT: @@ -703,35 +694,6 @@ fn G(x: A) { // CHECK:STDOUT: witness = (%HasF.F.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc8_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc8_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc8_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc8_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.HasF.impl(%T.loc10_14.2: type) { // CHECK:STDOUT: %T.loc10_14.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc10_14.1 (constants.%T)] // CHECK:STDOUT: %C.loc10_27.1: type = class_type @C, @C(%T.loc10_14.1) [symbolic = %C.loc10_27.1 (constants.%C.f2e)] @@ -763,10 +725,6 @@ fn G(x: A) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -776,22 +734,11 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HasF.F(@HasF.%Self: %HasF.type) { -// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.cb9)] -// CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.45c)] +// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.85b)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type.45c)); -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc8_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; +// CHECK:STDOUT: fn(%self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @C.as.HasF.impl.F(@C.as.HasF.impl.%T.loc10_14.2: type) { @@ -821,9 +768,9 @@ fn G(x: A) { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @HasF.F(constants.%Self.cb9) { -// CHECK:STDOUT: %Self => constants.%Self.cb9 -// CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type.45c +// CHECK:STDOUT: specific @HasF.F(constants.%Self) { +// CHECK:STDOUT: %Self => constants.%Self +// CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.85b // CHECK:STDOUT: } // CHECK:STDOUT: @@ -833,19 +780,6 @@ fn G(x: A) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C.as.HasF.impl(constants.%T) { // CHECK:STDOUT: %T.loc10_14.1 => constants.%T // CHECK:STDOUT: %C.loc10_27.1 => constants.%C.f2e @@ -1322,8 +1256,8 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.generic: %HasF.type.fe3 = struct_value () [concrete] // CHECK:STDOUT: %HasF.type.9f4: type = facet_type <@HasF, @HasF(%T)> [symbolic] // CHECK:STDOUT: %Self.0b6: %HasF.type.9f4 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Self.as_type.b0c: type = facet_access_type %Self.0b6 [symbolic] -// CHECK:STDOUT: %pattern_type.f60: type = pattern_type %Self.as_type.b0c [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.0b6 [symbolic] +// CHECK:STDOUT: %pattern_type.f60: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %HasF.F.type.46c: type = fn_type @HasF.F, @HasF(%T) [symbolic] // CHECK:STDOUT: %HasF.F.823: %HasF.F.type.46c = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type.dd8: type = assoc_entity_type @HasF, @HasF(%T) [symbolic] @@ -1336,21 +1270,9 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.facet: %HasF.type.9f4 = facet_value %T, (%HasF.impl_witness) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.ca8: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.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: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.041: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -1364,11 +1286,9 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1427,14 +1347,14 @@ fn G(x: A) { // CHECK:STDOUT: %self.patt: @HasF.F.%pattern_type (%pattern_type.f60) = binding_pattern self [concrete] // CHECK:STDOUT: %self.param_patt: @HasF.F.%pattern_type (%pattern_type.f60) = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type.b0c) = value_param call_param0 -// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.3 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.b0c)] { +// CHECK:STDOUT: %self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.3 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { // CHECK:STDOUT: %.loc5_14.2: @HasF.F.%HasF.type (%HasF.type.9f4) = specific_constant @HasF.%Self.1, @HasF(constants.%T) [symbolic = %Self (constants.%Self.0b6)] // CHECK:STDOUT: %Self.ref: @HasF.F.%HasF.type (%HasF.type.9f4) = name_ref Self, %.loc5_14.2 [symbolic = %Self (constants.%Self.0b6)] -// CHECK:STDOUT: %Self.as_type.loc5_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.b0c)] -// CHECK:STDOUT: %.loc5_14.3: type = converted %Self.ref, %Self.as_type.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.b0c)] +// CHECK:STDOUT: %Self.as_type.loc5_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc5_14.3: type = converted %Self.ref, %Self.as_type.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type.b0c) = bind_name self, %self.param +// CHECK:STDOUT: %self: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0.loc5_21.1: @HasF.%HasF.assoc_type (%HasF.assoc_type.dd8) = assoc_entity element0, %HasF.F.decl [symbolic = %assoc0.loc5_21.2 (constants.%assoc0.d31)] // CHECK:STDOUT: @@ -1471,43 +1391,7 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.6db = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.e79 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.ca8] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1516,10 +1400,6 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.041] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1531,10 +1411,10 @@ fn G(x: A) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF, @HasF(%T)> [symbolic = %HasF.type (constants.%HasF.type.9f4)] // CHECK:STDOUT: %Self: @HasF.F.%HasF.type (%HasF.type.9f4) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0b6)] -// CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.b0c)] +// CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.f60)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type.b0c)); +// CHECK:STDOUT: fn(%self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @T.as.HasF.impl.F(@T.as.HasF.impl.%T.loc8_14.2: type) { @@ -1550,10 +1430,6 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.6db) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.e79) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @G(%x.param: %A) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: %A = name_ref x, %x @@ -1581,7 +1457,7 @@ fn G(x: A) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %HasF.type => constants.%HasF.type.9f4 // CHECK:STDOUT: %Self => constants.%Self.0b6 -// CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type.b0c +// CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.f60 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/impl_forall.carbon b/toolchain/check/testdata/impl/lookup/impl_forall.carbon index fa3ee27bee75..ed49f065b86e 100644 --- a/toolchain/check/testdata/impl/lookup/impl_forall.carbon +++ b/toolchain/check/testdata/impl/lookup/impl_forall.carbon @@ -48,22 +48,22 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %A.type: type = generic_class_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %V.8b3: type = bind_symbolic_name V, 0 [symbolic] // CHECK:STDOUT: %A.13025a.2: type = class_type @A, @A(%V.8b3) [symbolic] // CHECK:STDOUT: %I.type.b13b9f.2: type = facet_type <@I, @I(%V.8b3)> [symbolic] // CHECK:STDOUT: %require_complete.00dd72.1: = require_complete_type %I.type.b13b9f.2 [symbolic] // CHECK:STDOUT: %I.impl_witness.7323ce.1: = impl_witness file.%I.impl_witness_table, @A.as.I.impl(%V.8b3) [symbolic] -// CHECK:STDOUT: %ptr.ca9f10.2: type = ptr_type %A.13025a.2 [symbolic] -// CHECK:STDOUT: %pattern_type.09bae9.2: type = pattern_type %ptr.ca9f10.2 [symbolic] +// CHECK:STDOUT: %ptr.ca9f10.1: type = ptr_type %A.13025a.2 [symbolic] +// CHECK:STDOUT: %pattern_type.09bae9.1: type = pattern_type %ptr.ca9f10.1 [symbolic] // CHECK:STDOUT: %ptr.79f131.2: type = ptr_type %V.8b3 [symbolic] // CHECK:STDOUT: %pattern_type.afe393.2: type = pattern_type %ptr.79f131.2 [symbolic] // CHECK:STDOUT: %A.as.I.impl.F.type.34761a.1: type = fn_type @A.as.I.impl.F, @A.as.I.impl(%V.8b3) [symbolic] // CHECK:STDOUT: %A.as.I.impl.F.93cd51.1: %A.as.I.impl.F.type.34761a.1 = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.6e5e64.1: = require_complete_type %ptr.79f131.2 [symbolic] -// CHECK:STDOUT: %require_complete.84dcf9.1: = require_complete_type %ptr.ca9f10.2 [symbolic] +// CHECK:STDOUT: %require_complete.84dcf9.1: = require_complete_type %ptr.ca9f10.1 [symbolic] // CHECK:STDOUT: %A.elem.1ceb36.2: type = unbound_element_type %A.13025a.2, %V.8b3 [symbolic] // CHECK:STDOUT: %require_complete.5b8aee.1: = require_complete_type %A.13025a.2 [symbolic] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] @@ -77,8 +77,8 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %specific_impl_fn.f44: = specific_impl_function %impl.elem0.751, @Copy.Op(%Copy.facet.2d1) [symbolic] // CHECK:STDOUT: %W: type = bind_symbolic_name W, 0 [symbolic] // CHECK:STDOUT: %A.13025a.3: type = class_type @A, @A(%W) [symbolic] -// CHECK:STDOUT: %ptr.ca9f10.3: type = ptr_type %A.13025a.3 [symbolic] -// CHECK:STDOUT: %pattern_type.09bae9.3: type = pattern_type %ptr.ca9f10.3 [symbolic] +// CHECK:STDOUT: %ptr.ca9f10.2: type = ptr_type %A.13025a.3 [symbolic] +// CHECK:STDOUT: %pattern_type.09bae9.2: type = pattern_type %ptr.ca9f10.2 [symbolic] // CHECK:STDOUT: %ptr.79f131.4: type = ptr_type %W [symbolic] // CHECK:STDOUT: %pattern_type.afe393.4: type = pattern_type %ptr.79f131.4 [symbolic] // CHECK:STDOUT: %I.type.b13b9f.3: type = facet_type <@I, @I(%W)> [symbolic] @@ -160,20 +160,20 @@ 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.34761a.1) = fn_decl @A.as.I.impl.F [symbolic = @A.as.I.impl.%A.as.I.impl.F (constants.%A.as.I.impl.F.93cd51.1)] { -// CHECK:STDOUT: %self.patt: @A.as.I.impl.F.%pattern_type.loc13_13 (%pattern_type.09bae9.2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @A.as.I.impl.F.%pattern_type.loc13_13 (%pattern_type.09bae9.2) = value_param_pattern %self.patt, call_param0 [concrete] +// CHECK:STDOUT: %self.patt: @A.as.I.impl.F.%pattern_type.loc13_13 (%pattern_type.09bae9.1) = binding_pattern self [concrete] +// CHECK:STDOUT: %self.param_patt: @A.as.I.impl.F.%pattern_type.loc13_13 (%pattern_type.09bae9.1) = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: %.loc13_8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] // CHECK:STDOUT: %return.patt: @A.as.I.impl.F.%pattern_type.loc13_28 (%pattern_type.afe393.2) = return_slot_pattern [concrete] // CHECK:STDOUT: %return.param_patt: @A.as.I.impl.F.%pattern_type.loc13_28 (%pattern_type.afe393.2) = out_param_pattern %return.patt, call_param1 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %V.ref: type = name_ref V, @A.as.I.impl.%V.loc12_14.2 [symbolic = %V (constants.%V.8b3)] // CHECK:STDOUT: %ptr.loc13_32.2: type = ptr_type %V.ref [symbolic = %ptr.loc13_32.1 (constants.%ptr.79f131.2)] -// CHECK:STDOUT: %self.param: @A.as.I.impl.F.%ptr.loc13_23.1 (%ptr.ca9f10.2) = value_param call_param0 -// CHECK:STDOUT: %.loc13_23: type = splice_block %ptr.loc13_23.2 [symbolic = %ptr.loc13_23.1 (constants.%ptr.ca9f10.2)] { +// CHECK:STDOUT: %self.param: @A.as.I.impl.F.%ptr.loc13_23.1 (%ptr.ca9f10.1) = value_param call_param0 +// CHECK:STDOUT: %.loc13_23: type = splice_block %ptr.loc13_23.2 [symbolic = %ptr.loc13_23.1 (constants.%ptr.ca9f10.1)] { // CHECK:STDOUT: %Self.ref: type = name_ref Self, @A.as.I.impl.%A.loc12_27.2 [symbolic = %A (constants.%A.13025a.2)] -// CHECK:STDOUT: %ptr.loc13_23.2: type = ptr_type %Self.ref [symbolic = %ptr.loc13_23.1 (constants.%ptr.ca9f10.2)] +// CHECK:STDOUT: %ptr.loc13_23.2: type = ptr_type %Self.ref [symbolic = %ptr.loc13_23.1 (constants.%ptr.ca9f10.1)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @A.as.I.impl.F.%ptr.loc13_23.1 (%ptr.ca9f10.2) = bind_name self, %self.param +// CHECK:STDOUT: %self: @A.as.I.impl.F.%ptr.loc13_23.1 (%ptr.ca9f10.1) = bind_name self, %self.param // CHECK:STDOUT: %return.param: ref @A.as.I.impl.F.%ptr.loc13_32.1 (%ptr.79f131.2) = out_param call_param1 // CHECK:STDOUT: %return: ref @A.as.I.impl.F.%ptr.loc13_32.1 (%ptr.79f131.2) = return_slot %return.param // CHECK:STDOUT: } @@ -188,8 +188,8 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: generic fn @A.as.I.impl.F(@A.as.I.impl.%V.loc12_14.2: type) { // CHECK:STDOUT: %V: type = bind_symbolic_name V, 0 [symbolic = %V (constants.%V.8b3)] // CHECK:STDOUT: %A: type = class_type @A, @A(%V) [symbolic = %A (constants.%A.13025a.2)] -// CHECK:STDOUT: %ptr.loc13_23.1: type = ptr_type %A [symbolic = %ptr.loc13_23.1 (constants.%ptr.ca9f10.2)] -// CHECK:STDOUT: %pattern_type.loc13_13: type = pattern_type %ptr.loc13_23.1 [symbolic = %pattern_type.loc13_13 (constants.%pattern_type.09bae9.2)] +// CHECK:STDOUT: %ptr.loc13_23.1: type = ptr_type %A [symbolic = %ptr.loc13_23.1 (constants.%ptr.ca9f10.1)] +// CHECK:STDOUT: %pattern_type.loc13_13: type = pattern_type %ptr.loc13_23.1 [symbolic = %pattern_type.loc13_13 (constants.%pattern_type.09bae9.1)] // CHECK:STDOUT: %ptr.loc13_32.1: type = ptr_type %V [symbolic = %ptr.loc13_32.1 (constants.%ptr.79f131.2)] // CHECK:STDOUT: %pattern_type.loc13_28: type = pattern_type %ptr.loc13_32.1 [symbolic = %pattern_type.loc13_28 (constants.%pattern_type.afe393.2)] // CHECK:STDOUT: @@ -204,9 +204,9 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %impl.elem0.loc14_12.2: @A.as.I.impl.F.%.loc14_12.2 (%.1cc) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_12.2 (constants.%impl.elem0.751)] // CHECK:STDOUT: %specific_impl_fn.loc14_12.2: = specific_impl_function %impl.elem0.loc14_12.2, @Copy.Op(%Copy.facet) [symbolic = %specific_impl_fn.loc14_12.2 (constants.%specific_impl_fn.f44)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @A.as.I.impl.F.%ptr.loc13_23.1 (%ptr.ca9f10.2)) -> @A.as.I.impl.F.%ptr.loc13_32.1 (%ptr.79f131.2) { +// CHECK:STDOUT: fn(%self.param: @A.as.I.impl.F.%ptr.loc13_23.1 (%ptr.ca9f10.1)) -> @A.as.I.impl.F.%ptr.loc13_32.1 (%ptr.79f131.2) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %self.ref: @A.as.I.impl.F.%ptr.loc13_23.1 (%ptr.ca9f10.2) = name_ref self, %self +// CHECK:STDOUT: %self.ref: @A.as.I.impl.F.%ptr.loc13_23.1 (%ptr.ca9f10.1) = name_ref self, %self // CHECK:STDOUT: %.loc14_17.1: ref @A.as.I.impl.F.%A (%A.13025a.2) = deref %self.ref // CHECK:STDOUT: %n.ref: @A.as.I.impl.F.%A.elem (%A.elem.1ceb36.2) = name_ref n, @A.%.loc4 [concrete = @A.%.loc4] // CHECK:STDOUT: %.loc14_17.2: ref @A.as.I.impl.F.%V (%V.8b3) = class_element_access %.loc14_17.1, element0 @@ -237,9 +237,9 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %specific_impl_fn.loc21_11.2: = specific_impl_function %impl.elem0.loc21_11.2, @I.F(%W.loc19_16.1, %I.facet) [symbolic = %specific_impl_fn.loc21_11.2 (constants.%specific_impl_fn.073)] // CHECK:STDOUT: %require_complete.loc21_11: = require_complete_type %A.loc19_32.1 [symbolic = %require_complete.loc21_11 (constants.%require_complete.5b8aee.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%a.param: @TestGeneric.%ptr.loc19_33.1 (%ptr.ca9f10.3)) -> @TestGeneric.%ptr.loc19_40.1 (%ptr.79f131.4) { +// CHECK:STDOUT: fn(%a.param: @TestGeneric.%ptr.loc19_33.1 (%ptr.ca9f10.2)) -> @TestGeneric.%ptr.loc19_40.1 (%ptr.79f131.4) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %a.ref: @TestGeneric.%ptr.loc19_33.1 (%ptr.ca9f10.3) = name_ref a, %a +// CHECK:STDOUT: %a.ref: @TestGeneric.%ptr.loc19_33.1 (%ptr.ca9f10.2) = name_ref a, %a // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, file.%I.decl [concrete = constants.%I.generic] // CHECK:STDOUT: %W.ref.loc21: type = name_ref W, %W.loc19_16.2 [symbolic = %W.loc19_16.1 (constants.%W)] // CHECK:STDOUT: %I.type.loc21_17.1: type = facet_type <@I, @I(constants.%W)> [symbolic = %I.type.loc21_17.2 (constants.%I.type.b13b9f.3)] @@ -250,7 +250,7 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: %bound_method.loc21_11: = bound_method %.loc21_11.1, %impl.elem0.loc21_11.1 // CHECK:STDOUT: %specific_impl_fn.loc21_11.1: = specific_impl_function %impl.elem0.loc21_11.1, @I.F(constants.%W, constants.%I.facet.729) [symbolic = %specific_impl_fn.loc21_11.2 (constants.%specific_impl_fn.073)] // CHECK:STDOUT: %bound_method.loc21_22: = bound_method %.loc21_11.1, %specific_impl_fn.loc21_11.1 -// CHECK:STDOUT: %addr: @TestGeneric.%ptr.loc19_33.1 (%ptr.ca9f10.3) = addr_of %.loc21_11.1 +// CHECK:STDOUT: %addr: @TestGeneric.%ptr.loc19_33.1 (%ptr.ca9f10.2) = addr_of %.loc21_11.1 // CHECK:STDOUT: %.loc21_22: init @TestGeneric.%ptr.loc19_40.1 (%ptr.79f131.4) = call %bound_method.loc21_22(%addr) // CHECK:STDOUT: return %.loc21_22 to %return // CHECK:STDOUT: } @@ -290,8 +290,8 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: specific @A.as.I.impl.F(constants.%V.8b3) { // CHECK:STDOUT: %V => constants.%V.8b3 // CHECK:STDOUT: %A => constants.%A.13025a.2 -// CHECK:STDOUT: %ptr.loc13_23.1 => constants.%ptr.ca9f10.2 -// CHECK:STDOUT: %pattern_type.loc13_13 => constants.%pattern_type.09bae9.2 +// CHECK:STDOUT: %ptr.loc13_23.1 => constants.%ptr.ca9f10.1 +// CHECK:STDOUT: %pattern_type.loc13_13 => constants.%pattern_type.09bae9.1 // CHECK:STDOUT: %ptr.loc13_32.1 => constants.%ptr.79f131.2 // CHECK:STDOUT: %pattern_type.loc13_28 => constants.%pattern_type.afe393.2 // CHECK:STDOUT: } @@ -299,8 +299,8 @@ fn TestSpecific(a: A({})*) -> {}* { // CHECK:STDOUT: specific @TestGeneric(constants.%W) { // CHECK:STDOUT: %W.loc19_16.1 => constants.%W // CHECK:STDOUT: %A.loc19_32.1 => constants.%A.13025a.3 -// CHECK:STDOUT: %ptr.loc19_33.1 => constants.%ptr.ca9f10.3 -// CHECK:STDOUT: %pattern_type.loc19_26 => constants.%pattern_type.09bae9.3 +// CHECK:STDOUT: %ptr.loc19_33.1 => constants.%ptr.ca9f10.2 +// CHECK:STDOUT: %pattern_type.loc19_26 => constants.%pattern_type.09bae9.2 // CHECK:STDOUT: %ptr.loc19_40.1 => constants.%ptr.79f131.4 // CHECK:STDOUT: %pattern_type.loc19_36 => constants.%pattern_type.afe393.4 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/impl/lookup/import.carbon b/toolchain/check/testdata/impl/lookup/import.carbon index 1ac7fb4a0122..35369fc61f30 100644 --- a/toolchain/check/testdata/impl/lookup/import.carbon +++ b/toolchain/check/testdata/impl/lookup/import.carbon @@ -227,21 +227,14 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete] -// CHECK:STDOUT: %Self.cb9: %HasF.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %Self.as_type.45c: type = facet_access_type %Self.cb9 [symbolic] -// CHECK:STDOUT: %pattern_type.85b: type = pattern_type %Self.as_type.45c [symbolic] +// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.85b: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %HasF.F.type: type = fn_type @HasF.F [concrete] // CHECK:STDOUT: %HasF.F: %HasF.F.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, @HasF.%HasF.F.decl [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table [concrete] @@ -253,11 +246,9 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -278,18 +269,18 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @HasF { -// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.cb9] +// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %HasF.F.decl: %HasF.F.type = fn_decl @HasF.F [concrete = constants.%HasF.F] { // CHECK:STDOUT: %self.patt: @HasF.F.%pattern_type (%pattern_type.85b) = binding_pattern self [concrete] // CHECK:STDOUT: %self.param_patt: @HasF.F.%pattern_type (%pattern_type.85b) = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type.45c) = value_param call_param0 -// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.45c)] { -// CHECK:STDOUT: %Self.ref: %HasF.type = name_ref Self, @HasF.%Self [symbolic = %Self (constants.%Self.cb9)] -// CHECK:STDOUT: %Self.as_type.loc5_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.45c)] -// CHECK:STDOUT: %.loc5_14.2: type = converted %Self.ref, %Self.as_type.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.45c)] +// CHECK:STDOUT: %self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { +// CHECK:STDOUT: %Self.ref: %HasF.type = name_ref Self, @HasF.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc5_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc5_14.2: type = converted %Self.ref, %Self.as_type.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type.45c) = bind_name self, %self.param +// CHECK:STDOUT: %self: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, %HasF.F.decl [concrete = constants.%assoc0] // CHECK:STDOUT: @@ -299,22 +290,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = (%HasF.F.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] @@ -331,10 +306,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -343,23 +314,21 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HasF.F(@HasF.%Self: %HasF.type) { -// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.cb9)] -// CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.45c)] +// CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.85b)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type.45c)); +// CHECK:STDOUT: fn(%self.param: @HasF.F.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.HasF.impl.F(%self.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @HasF.F(constants.%Self.cb9) { -// CHECK:STDOUT: %Self => constants.%Self.cb9 -// CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type.45c +// CHECK:STDOUT: specific @HasF.F(constants.%Self) { +// CHECK:STDOUT: %Self => constants.%Self +// CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.85b // CHECK:STDOUT: } // CHECK:STDOUT: @@ -381,13 +350,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasG.assoc_type: type = assoc_entity_type @HasG [concrete] // CHECK:STDOUT: %assoc0: %HasG.assoc_type = assoc_entity element0, @HasG.%HasG.G.decl [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.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: %C: type = class_type @C [concrete] @@ -415,7 +377,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -424,7 +385,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .HasF = %PackageA.HasF // CHECK:STDOUT: import PackageA//default // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %PackageA.C: type = import_ref PackageA//default, C, loaded [concrete = constants.%C] // CHECK:STDOUT: %PackageA.import_ref.8f2: = import_ref PackageA//default, loc8_10, loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %PackageA.import_ref.2c4 = import_ref PackageA//default, inst43 [no loc], unloaded @@ -497,22 +457,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = (imports.%PackageA.F) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.8e5 = binding_pattern self [concrete] @@ -559,10 +503,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -585,8 +525,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: fn(%self.param: @HasG.G.%Self.as_type.loc7_14.1 (%Self.as_type.5b9)); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.HasG.impl.G(%self.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return @@ -1089,8 +1027,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageB.import_ref.70a: %HasG.G.type = import_ref PackageB//default, loc7_21, loaded [concrete = constants.%HasG.G] // CHECK:STDOUT: %PackageB.import_ref.4b1: %HasG.type = import_ref PackageB//default, inst21 [no loc], loaded [symbolic = constants.%Self] // CHECK:STDOUT: %PackageB.import_ref.f94 = import_ref PackageB//default, loc13_25, unloaded -// CHECK:STDOUT: %PackageB.import_ref.8db: = import_ref PackageB//default, inst92 [indirect], loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageB.import_ref.6a9 = import_ref PackageB//default, inst93 [indirect], unloaded +// CHECK:STDOUT: %PackageB.import_ref.8db: = import_ref PackageB//default, inst53 [indirect], loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %PackageB.import_ref.6a9 = import_ref PackageB//default, inst54 [indirect], unloaded // CHECK:STDOUT: %PackageB.import_ref.dfb: type = import_ref PackageB//default, loc13_14, loaded [concrete = constants.%C] // CHECK:STDOUT: %PackageB.import_ref.cee586.1: type = import_ref PackageB//default, loc13_20, loaded [concrete = constants.%HasG.type] // CHECK:STDOUT: %PackageB.import_ref.179: = import_ref PackageB//default, loc23_16, loaded [concrete = constants.%HasG.impl_witness] @@ -1393,34 +1331,24 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %AnyParam.type: type = generic_class_type @AnyParam [concrete] // CHECK:STDOUT: %AnyParam.generic: %AnyParam.type = struct_value () [concrete] // CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @AnyParam.%Destroy.impl_witness_table, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] -// CHECK:STDOUT: %ptr.eba: type = ptr_type %AnyParam [symbolic] -// CHECK:STDOUT: %pattern_type.74e: type = pattern_type %ptr.eba [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op: %AnyParam.as.Destroy.impl.Op.type = 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: %Y.type: type = facet_type <@Y> [concrete] -// CHECK:STDOUT: %Self.045: %Y.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %Self.as_type.fca: type = facet_access_type %Self.045 [symbolic] -// CHECK:STDOUT: %pattern_type.5da: type = pattern_type %Self.as_type.fca [symbolic] +// CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.5da: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Y.K.type: type = fn_type @Y.K [concrete] // CHECK:STDOUT: %Y.K: %Y.K.type = struct_value () [concrete] // CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete] // CHECK:STDOUT: %assoc0: %Y.assoc_type = assoc_entity element0, @Y.%Y.K.decl [concrete] -// CHECK:STDOUT: %require_complete.dc2: = require_complete_type %Self.as_type.fca [symbolic] +// CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1446,18 +1374,18 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Y { -// CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.045] +// CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %Y.K.decl: %Y.K.type = fn_decl @Y.K [concrete = constants.%Y.K] { // CHECK:STDOUT: %self.patt: @Y.K.%pattern_type (%pattern_type.5da) = binding_pattern self [concrete] // CHECK:STDOUT: %self.param_patt: @Y.K.%pattern_type (%pattern_type.5da) = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Y.K.%Self.as_type.loc7_14.1 (%Self.as_type.fca) = value_param call_param0 -// CHECK:STDOUT: %.loc7_14.1: type = splice_block %.loc7_14.2 [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type.fca)] { -// CHECK:STDOUT: %Self.ref: %Y.type = name_ref Self, @Y.%Self [symbolic = %Self (constants.%Self.045)] -// CHECK:STDOUT: %Self.as_type.loc7_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type.fca)] -// CHECK:STDOUT: %.loc7_14.2: type = converted %Self.ref, %Self.as_type.loc7_14.2 [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type.fca)] +// CHECK:STDOUT: %self.param: @Y.K.%Self.as_type.loc7_14.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc7_14.1: type = splice_block %.loc7_14.2 [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type)] { +// CHECK:STDOUT: %Self.ref: %Y.type = name_ref Self, @Y.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc7_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc7_14.2: type = converted %Self.ref, %Self.as_type.loc7_14.2 [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Y.K.%Self.as_type.loc7_14.1 (%Self.as_type.fca) = bind_name self, %self.param +// CHECK:STDOUT: %self: @Y.K.%Self.as_type.loc7_14.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %Y.assoc_type = assoc_entity element0, %Y.K.decl [concrete = constants.%assoc0] // CHECK:STDOUT: @@ -1467,49 +1395,14 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = (%Y.K.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @AnyParam.as.Destroy.impl(@AnyParam.%T.loc4_16.2: type, @AnyParam.%X.loc4_26.2: @AnyParam.%T.loc4_16.1 (%T)) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @AnyParam.%Destroy.impl_witness_table, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %AnyParam.as.Destroy.impl.Op.type (constants.%AnyParam.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type) = struct_value () [symbolic = %AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @AnyParam.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.decl: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type) = fn_decl @AnyParam.as.Destroy.impl.Op [symbolic = @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @AnyParam.as.Destroy.impl.Op.%pattern_type (%pattern_type.74e) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @AnyParam.as.Destroy.impl.Op.%pattern_type (%pattern_type.74e) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_33.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @AnyParam.as.Destroy.impl.Op.%ptr (%ptr.eba) = value_param call_param0 -// CHECK:STDOUT: %.loc4_33.2: type = splice_block %Self.ref [symbolic = %AnyParam (constants.%AnyParam)] { -// CHECK:STDOUT: %.loc4_33.3: type = specific_constant constants.%AnyParam, @AnyParam(constants.%T, constants.%X) [symbolic = %AnyParam (constants.%AnyParam)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_33.3 [symbolic = %AnyParam (constants.%AnyParam)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @AnyParam.as.Destroy.impl.Op.%ptr (%ptr.eba) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %AnyParam.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @AnyParam.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(%T.loc4_16.2: type, %X.loc4_26.2: @AnyParam.%T.loc4_16.1 (%T)) { // CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.1 (constants.%T)] // CHECK:STDOUT: %X.loc4_26.1: @AnyParam.%T.loc4_16.1 (%T) = bind_symbolic_name X, 1 [symbolic = %X.loc4_26.1 (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_16.1 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_16.1 [symbolic = %require_complete (constants.%require_complete.4ae)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AnyParam [symbolic = @AnyParam.as.Destroy.impl.%AnyParam (constants.%AnyParam)] -// CHECK:STDOUT: impl_decl @AnyParam.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.decl), @AnyParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @AnyParam.as.Destroy.impl(constants.%T, constants.%X) [symbolic = @AnyParam.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1518,27 +1411,15 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @AnyParam.as.Destroy.impl.Op(@AnyParam.%T.loc4_16.2: type, @AnyParam.%X.loc4_26.2: @AnyParam.%T.loc4_16.1 (%T)) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.Op.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam)] -// CHECK:STDOUT: %ptr: type = ptr_type %AnyParam [symbolic = %ptr (constants.%ptr.eba)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.74e)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @AnyParam.as.Destroy.impl.Op.%ptr (%ptr.eba)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @Y.K(@Y.%Self: %Y.type) { -// CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.045)] -// CHECK:STDOUT: %Self.as_type.loc7_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type.fca)] +// CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc7_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc7_14.1 [symbolic = %pattern_type (constants.%pattern_type.5da)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc7_14.1 [symbolic = %require_complete (constants.%require_complete.dc2)] +// CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc7_14.1 [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Y.K.%Self.as_type.loc7_14.1 (%Self.as_type.fca)) { +// CHECK:STDOUT: fn(%self.param: @Y.K.%Self.as_type.loc7_14.1 (%Self.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -1550,24 +1431,9 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl.Op(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam -// CHECK:STDOUT: %ptr => constants.%ptr.eba -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.74e -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Y.K(constants.%Self.045) { -// CHECK:STDOUT: %Self => constants.%Self.045 -// CHECK:STDOUT: %Self.as_type.loc7_14.1 => constants.%Self.as_type.fca +// CHECK:STDOUT: specific @Y.K(constants.%Self) { +// CHECK:STDOUT: %Self => constants.%Self +// CHECK:STDOUT: %Self.as_type.loc7_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.5da // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1589,9 +1455,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %AnyParam.560: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic] // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] -// CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %pattern_type.438: type = pattern_type %GenericInterface.type.c92 [concrete] // CHECK:STDOUT: %AnyParam.241: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.c92, %GenericInterface.generic) [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] @@ -1606,7 +1470,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // 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.241, (%Y.impl_witness) [concrete] -// CHECK:STDOUT: %complete_type.eb2: = complete_type_witness %GenericInterface.type.c92 [concrete] // CHECK:STDOUT: %L.type: type = fn_type @L [concrete] // CHECK:STDOUT: %L: %L.type = struct_value () [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.241 = struct_value () [concrete] @@ -1614,17 +1477,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %assoc0.494: %Y.assoc_type = assoc_entity element0, imports.%PackageHasParam.import_ref.ce2 [concrete] // CHECK:STDOUT: %.41c: type = fn_type_with_self_type %Y.K.type, %Y.facet [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.07c: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type.694: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.1db: %AnyParam.as.Destroy.impl.Op.type.694 = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.4a9: type = ptr_type %AnyParam.560 [symbolic] -// CHECK:STDOUT: %pattern_type.84c: type = pattern_type %ptr.4a9 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.4a8: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%GenericInterface.type.c92, %GenericInterface.generic) [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type.a20: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%GenericInterface.type.c92, %GenericInterface.generic) [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.882: %AnyParam.as.Destroy.impl.Op.type.a20 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %AnyParam.241, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.925: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.290: %AggregateT.as_type.as.Destroy.impl.Op.type.925 = struct_value () [concrete] // CHECK:STDOUT: %ptr.301: type = ptr_type %AnyParam.241 [concrete] -// CHECK:STDOUT: %pattern_type.027: type = pattern_type %ptr.301 [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.specific_fn: = specific_function %AnyParam.as.Destroy.impl.Op.882, @AnyParam.as.Destroy.impl.Op(%GenericInterface.type.c92, %GenericInterface.generic) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.290, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1639,26 +1497,17 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: import PackageHasParam//default // CHECK:STDOUT: } // CHECK:STDOUT: %PackageHasParam.AnyParam: %AnyParam.type = import_ref PackageHasParam//default, AnyParam, loaded [concrete = constants.%AnyParam.generic] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.1: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.1: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] +// CHECK:STDOUT: %PackageHasParam.import_ref.5ab: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] +// CHECK:STDOUT: %PackageHasParam.import_ref.34c: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: %PackageHasParam.import_ref.8f2: = import_ref PackageHasParam//default, loc4_34, loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst38 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.Y: type = import_ref PackageHasParam//default, Y, loaded [concrete = constants.%Y.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.0f3 = import_ref PackageHasParam//default, inst99 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.0f3 = import_ref PackageHasParam//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.f69: %Y.assoc_type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%assoc0.494] // CHECK:STDOUT: %PackageHasParam.K: %Y.K.type = import_ref PackageHasParam//default, K, loaded [concrete = constants.%Y.K] -// CHECK:STDOUT: %PackageHasParam.import_ref.28c: %Y.type = import_ref PackageHasParam//default, inst99 [no loc], loaded [symbolic = constants.%Self.2f4] +// CHECK:STDOUT: %PackageHasParam.import_ref.28c: %Y.type = import_ref PackageHasParam//default, inst44 [no loc], loaded [symbolic = constants.%Self.2f4] // CHECK:STDOUT: %PackageHasParam.import_ref.ce2: %Y.K.type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%Y.K] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.043: = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.07c)] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.2: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.2: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] -// CHECK:STDOUT: %PackageHasParam.import_ref.cdc: type = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %PackageHasParam.import_ref.e45: type = import_ref PackageHasParam//default, inst41 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.f8b: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type.694) = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op.1db)] -// CHECK:STDOUT: %Destroy.impl_witness_table.761 = impl_witness_table (%PackageHasParam.import_ref.f8b), @AnyParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.3: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.3: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1727,29 +1576,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = file.%Y.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @AnyParam.as.Destroy.impl(imports.%PackageHasParam.import_ref.5ab3ec.2: type, imports.%PackageHasParam.import_ref.34c075.2: @AnyParam.%T (%T)) [from "has_param.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.07c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %AnyParam.as.Destroy.impl.Op.type (constants.%AnyParam.as.Destroy.impl.Op.type.694)] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type.694) = struct_value () [symbolic = %AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op.1db)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%PackageHasParam.import_ref.cdc as imports.%PackageHasParam.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%PackageHasParam.import_ref.043 -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab3ec.1: type, imports.%PackageHasParam.import_ref.34c075.1: @AnyParam.%T (%T)) [from "has_param.carbon"] { +// CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab: type, imports.%PackageHasParam.import_ref.34c: @AnyParam.%T (%T)) [from "has_param.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %X: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: complete_type_witness = imports.%PackageHasParam.import_ref.8f2 @@ -1784,8 +1616,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %obj.var: ref %AnyParam.241 = var %obj.var_patt // CHECK:STDOUT: %.loc13_58.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc13_58.2: init %AnyParam.241 = class_init (), %obj.var [concrete = constants.%AnyParam.val] -// CHECK:STDOUT: %.loc13_3: init %AnyParam.241 = converted %.loc13_58.1, %.loc13_58.2 [concrete = constants.%AnyParam.val] -// CHECK:STDOUT: assign %obj.var, %.loc13_3 +// CHECK:STDOUT: %.loc13_3.1: init %AnyParam.241 = converted %.loc13_58.1, %.loc13_58.2 [concrete = constants.%AnyParam.val] +// CHECK:STDOUT: assign %obj.var, %.loc13_3.1 // CHECK:STDOUT: %.loc13_53: type = splice_block %AnyParam [concrete = constants.%AnyParam.241] { // CHECK:STDOUT: %PackageHasParam.ref.loc13: = name_ref PackageHasParam, imports.%PackageHasParam [concrete = imports.%PackageHasParam] // CHECK:STDOUT: %AnyParam.ref: %AnyParam.type = name_ref AnyParam, imports.%PackageHasParam.AnyParam [concrete = constants.%AnyParam.generic] @@ -1801,26 +1633,16 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %bound_method.loc14: = bound_method %obj.ref, %impl.elem0 // CHECK:STDOUT: %.loc14: %AnyParam.241 = bind_value %obj.ref // CHECK:STDOUT: %AnyParam.as.Y.impl.K.call: init %empty_tuple.type = call %bound_method.loc14(%.loc14) -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.bound: = bound_method %obj.var, constants.%AnyParam.as.Destroy.impl.Op.882 -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AnyParam.as.Destroy.impl.Op.882, @AnyParam.as.Destroy.impl.Op(constants.%GenericInterface.type.c92, constants.%GenericInterface.generic) [concrete = constants.%AnyParam.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc13: = bound_method %obj.var, %AnyParam.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%AnyParam.241, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc13_3.2: %type_where = converted constants.%AnyParam.241, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %obj.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.290 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.290, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc13: = bound_method %obj.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.301 = addr_of %obj.var -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc13(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc13(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @AnyParam.as.Destroy.impl.Op(imports.%PackageHasParam.import_ref.5ab3ec.3: type, imports.%PackageHasParam.import_ref.34c075.3: @AnyParam.%T (%T)) [from "has_param.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.Op.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %ptr: type = ptr_type %AnyParam [symbolic = %ptr (constants.%ptr.4a9)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.84c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @GenericInterface(constants.%U) { // CHECK:STDOUT: %U.loc6_28.1 => constants.%U // CHECK:STDOUT: } @@ -1837,7 +1659,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.438 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.eb2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.K(constants.%Self.2f4) { @@ -1852,40 +1673,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.004 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.560 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.07c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl.Op(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.560 -// CHECK:STDOUT: %ptr => constants.%ptr.4a9 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.84c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl(constants.%GenericInterface.type.c92, constants.%GenericInterface.generic) { -// CHECK:STDOUT: %T => constants.%GenericInterface.type.c92 -// CHECK:STDOUT: %X => constants.%GenericInterface.generic -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.241 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.4a8 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type => constants.%AnyParam.as.Destroy.impl.Op.type.a20 -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op => constants.%AnyParam.as.Destroy.impl.Op.882 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl.Op(constants.%GenericInterface.type.c92, constants.%GenericInterface.generic) { -// CHECK:STDOUT: %T => constants.%GenericInterface.type.c92 -// CHECK:STDOUT: %X => constants.%GenericInterface.generic -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.241 -// CHECK:STDOUT: %ptr => constants.%ptr.301 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.027 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- use_generic_interface_as_param.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1898,9 +1685,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %AnyParam.560: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic] // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] -// CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %GenericInterface.type.0da: type = generic_interface_type @GenericInterface [concrete] // CHECK:STDOUT: %GenericInterface.generic: %GenericInterface.type.0da = struct_value () [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] @@ -1908,7 +1693,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Self.719: %GenericInterface.type.55d = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %pattern_type.a64: type = pattern_type %GenericInterface.type.0da [concrete] // CHECK:STDOUT: %AnyParam.861: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.0da, %GenericInterface.generic) [concrete] -// CHECK:STDOUT: %complete_type.42f: = complete_type_witness %GenericInterface.type.0da [concrete] // CHECK:STDOUT: %pattern_type.3ad: type = pattern_type %AnyParam.861 [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.861 = struct_value () [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] @@ -1926,17 +1710,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.07c: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type.694: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.1db: %AnyParam.as.Destroy.impl.Op.type.694 = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.4a9: type = ptr_type %AnyParam.560 [symbolic] -// CHECK:STDOUT: %pattern_type.84c: type = pattern_type %ptr.4a9 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.bd2: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%GenericInterface.type.0da, %GenericInterface.generic) [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type.db8: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%GenericInterface.type.0da, %GenericInterface.generic) [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.102: %AnyParam.as.Destroy.impl.Op.type.db8 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %AnyParam.861, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.0b7: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.596: %AggregateT.as_type.as.Destroy.impl.Op.type.0b7 = struct_value () [concrete] // CHECK:STDOUT: %ptr.1ef: type = ptr_type %AnyParam.861 [concrete] -// CHECK:STDOUT: %pattern_type.cac: type = pattern_type %ptr.1ef [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.specific_fn: = specific_function %AnyParam.as.Destroy.impl.Op.102, @AnyParam.as.Destroy.impl.Op(%GenericInterface.type.0da, %GenericInterface.generic) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.596, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1955,34 +1734,25 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: import PackageGenericInterface//default // CHECK:STDOUT: } // CHECK:STDOUT: %PackageHasParam.AnyParam: %AnyParam.type = import_ref PackageHasParam//default, AnyParam, loaded [concrete = constants.%AnyParam.generic] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.1: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.1: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] +// CHECK:STDOUT: %PackageHasParam.import_ref.5ab: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] +// CHECK:STDOUT: %PackageHasParam.import_ref.34c: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: %PackageHasParam.import_ref.8f2: = import_ref PackageHasParam//default, loc4_34, loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst38 [no loc], unloaded // CHECK:STDOUT: %PackageGenericInterface.GenericInterface: %GenericInterface.type.0da = import_ref PackageGenericInterface//default, GenericInterface, loaded [concrete = constants.%GenericInterface.generic] // CHECK:STDOUT: %PackageGenericInterface.import_ref.5ab: type = import_ref PackageGenericInterface//default, loc6_28, loaded [symbolic = @GenericInterface.%U (constants.%U)] // CHECK:STDOUT: %PackageGenericInterface.import_ref.b37 = import_ref PackageGenericInterface//default, inst32 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.Y: type = import_ref PackageHasParam//default, Y, loaded [concrete = constants.%Y.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.0f3 = import_ref PackageHasParam//default, inst99 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.0f3 = import_ref PackageHasParam//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.f69: %Y.assoc_type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%assoc0.494] // CHECK:STDOUT: %PackageHasParam.K = import_ref PackageHasParam//default, K, unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.ce2: %Y.K.type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%Y.K] -// CHECK:STDOUT: %PackageHasParam.import_ref.28c: %Y.type = import_ref PackageHasParam//default, inst99 [no loc], loaded [symbolic = constants.%Self.2f4] +// CHECK:STDOUT: %PackageHasParam.import_ref.28c: %Y.type = import_ref PackageHasParam//default, inst44 [no loc], loaded [symbolic = constants.%Self.2f4] // CHECK:STDOUT: %PackageGenericInterface.import_ref.ba6: = import_ref PackageGenericInterface//default, loc8_70, loaded [concrete = constants.%Y.impl_witness] // CHECK:STDOUT: %PackageGenericInterface.import_ref.321: type = import_ref PackageGenericInterface//default, loc8_47, loaded [concrete = constants.%AnyParam.861] // CHECK:STDOUT: %PackageGenericInterface.import_ref.ca6: type = import_ref PackageGenericInterface//default, loc8_67, loaded [concrete = constants.%Y.type] // CHECK:STDOUT: %PackageGenericInterface.import_ref.0fb: %AnyParam.as.Y.impl.K.type = import_ref PackageGenericInterface//default, loc9_22, loaded [concrete = constants.%AnyParam.as.Y.impl.K] // CHECK:STDOUT: %Y.impl_witness_table = impl_witness_table (%PackageGenericInterface.import_ref.0fb), @AnyParam.as.Y.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.043: = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.07c)] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.2: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.2: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] -// CHECK:STDOUT: %PackageHasParam.import_ref.cdc: type = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %PackageHasParam.import_ref.e45: type = import_ref PackageHasParam//default, inst41 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.f8b: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type.694) = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op.1db)] -// CHECK:STDOUT: %Destroy.impl_witness_table.761 = impl_witness_table (%PackageHasParam.import_ref.f8b), @AnyParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.3: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.3: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2024,29 +1794,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = imports.%PackageGenericInterface.import_ref.ba6 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @AnyParam.as.Destroy.impl(imports.%PackageHasParam.import_ref.5ab3ec.2: type, imports.%PackageHasParam.import_ref.34c075.2: @AnyParam.%T (%T)) [from "has_param.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.07c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %AnyParam.as.Destroy.impl.Op.type (constants.%AnyParam.as.Destroy.impl.Op.type.694)] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type.694) = struct_value () [symbolic = %AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op.1db)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%PackageHasParam.import_ref.cdc as imports.%PackageHasParam.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%PackageHasParam.import_ref.043 -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab3ec.1: type, imports.%PackageHasParam.import_ref.34c075.1: @AnyParam.%T (%T)) [from "has_param.carbon"] { +// CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab: type, imports.%PackageHasParam.import_ref.34c: @AnyParam.%T (%T)) [from "has_param.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %X: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: complete_type_witness = imports.%PackageHasParam.import_ref.8f2 @@ -2065,8 +1818,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %obj.var: ref %AnyParam.861 = var %obj.var_patt // CHECK:STDOUT: %.loc9_50.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc9_50.2: init %AnyParam.861 = class_init (), %obj.var [concrete = constants.%AnyParam.val] -// CHECK:STDOUT: %.loc8: init %AnyParam.861 = converted %.loc9_50.1, %.loc9_50.2 [concrete = constants.%AnyParam.val] -// CHECK:STDOUT: assign %obj.var, %.loc8 +// CHECK:STDOUT: %.loc8_3.1: init %AnyParam.861 = converted %.loc9_50.1, %.loc9_50.2 [concrete = constants.%AnyParam.val] +// CHECK:STDOUT: assign %obj.var, %.loc8_3.1 // CHECK:STDOUT: %.loc9_45: type = splice_block %AnyParam [concrete = constants.%AnyParam.861] { // CHECK:STDOUT: %PackageHasParam.ref.loc8: = name_ref PackageHasParam, imports.%PackageHasParam [concrete = imports.%PackageHasParam] // CHECK:STDOUT: %AnyParam.ref: %AnyParam.type = name_ref AnyParam, imports.%PackageHasParam.AnyParam [concrete = constants.%AnyParam.generic] @@ -2083,11 +1836,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %bound_method.loc10: = bound_method %obj.ref, %impl.elem0 // CHECK:STDOUT: %.loc10: %AnyParam.861 = bind_value %obj.ref // CHECK:STDOUT: %AnyParam.as.Y.impl.K.call: init %empty_tuple.type = call %bound_method.loc10(%.loc10) -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.bound: = bound_method %obj.var, constants.%AnyParam.as.Destroy.impl.Op.102 -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AnyParam.as.Destroy.impl.Op.102, @AnyParam.as.Destroy.impl.Op(constants.%GenericInterface.type.0da, constants.%GenericInterface.generic) [concrete = constants.%AnyParam.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc8: = bound_method %obj.var, %AnyParam.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%AnyParam.861, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_3.2: %type_where = converted constants.%AnyParam.861, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %obj.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.596 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.596, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc8: = bound_method %obj.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.1ef = addr_of %obj.var -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2104,18 +1859,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: fn @AnyParam.as.Y.impl.K [from "has_generic_interface.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @AnyParam.as.Destroy.impl.Op(imports.%PackageHasParam.import_ref.5ab3ec.3: type, imports.%PackageHasParam.import_ref.34c075.3: @AnyParam.%T (%T)) [from "has_param.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.Op.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %ptr: type = ptr_type %AnyParam [symbolic = %ptr (constants.%ptr.4a9)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.84c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %X => constants.%X @@ -2132,7 +1875,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a64 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.42f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.K(constants.%Self.2f4) { @@ -2141,40 +1883,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e57 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.560 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.07c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl.Op(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.560 -// CHECK:STDOUT: %ptr => constants.%ptr.4a9 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.84c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl(constants.%GenericInterface.type.0da, constants.%GenericInterface.generic) { -// CHECK:STDOUT: %T => constants.%GenericInterface.type.0da -// CHECK:STDOUT: %X => constants.%GenericInterface.generic -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.861 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.bd2 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type => constants.%AnyParam.as.Destroy.impl.Op.type.db8 -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op => constants.%AnyParam.as.Destroy.impl.Op.102 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl.Op(constants.%GenericInterface.type.0da, constants.%GenericInterface.generic) { -// CHECK:STDOUT: %T => constants.%GenericInterface.type.0da -// CHECK:STDOUT: %X => constants.%GenericInterface.generic -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.861 -// CHECK:STDOUT: %ptr => constants.%ptr.1ef -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cac -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- has_generic_class.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2186,22 +1894,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %GenericClass.generic: %GenericClass.type = struct_value () [concrete] // CHECK:STDOUT: %GenericClass: type = class_type @GenericClass, @GenericClass(%U) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.102: = impl_witness @GenericClass.%Destroy.impl_witness_table, @GenericClass.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %ptr.b1a: type = ptr_type %GenericClass [symbolic] -// CHECK:STDOUT: %pattern_type.0e2: type = pattern_type %ptr.b1a [symbolic] -// CHECK:STDOUT: %GenericClass.as.Destroy.impl.Op.type: type = fn_type @GenericClass.as.Destroy.impl.Op, @GenericClass.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %GenericClass.as.Destroy.impl.Op: %GenericClass.as.Destroy.impl.Op.type = 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: %AnyParam.type: type = generic_class_type @AnyParam [concrete] // CHECK:STDOUT: %AnyParam.generic: %AnyParam.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %AnyParam.560: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic] // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] -// CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %pattern_type.17e: type = pattern_type %GenericClass.type [concrete] // CHECK:STDOUT: %AnyParam.0dd: type = class_type @AnyParam, @AnyParam(%GenericClass.type, %GenericClass.generic) [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] @@ -2216,24 +1915,19 @@ fn Test(c: HasExtraInterfaces.C(type)) { // 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.0dd, (%Y.impl_witness) [concrete] -// CHECK:STDOUT: %complete_type.398: = complete_type_witness %GenericClass.type [concrete] // CHECK:STDOUT: %L.type: type = fn_type @L [concrete] // CHECK:STDOUT: %L: %L.type = struct_value () [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.0dd = struct_value () [concrete] // CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete] // CHECK:STDOUT: %assoc0.494: %Y.assoc_type = assoc_entity element0, imports.%PackageHasParam.import_ref.ce2 [concrete] // CHECK:STDOUT: %.507: type = fn_type_with_self_type %Y.K.type, %Y.facet [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.07c: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type.694: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.1db: %AnyParam.as.Destroy.impl.Op.type.694 = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.4a9: type = ptr_type %AnyParam.560 [symbolic] -// CHECK:STDOUT: %pattern_type.84c: type = pattern_type %ptr.4a9 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.456: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%GenericClass.type, %GenericClass.generic) [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type.f67: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%GenericClass.type, %GenericClass.generic) [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.422: %AnyParam.as.Destroy.impl.Op.type.f67 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %AnyParam.0dd, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.846: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bde: %AggregateT.as_type.as.Destroy.impl.Op.type.846 = struct_value () [concrete] // CHECK:STDOUT: %ptr.d96: type = ptr_type %AnyParam.0dd [concrete] -// CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %ptr.d96 [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.specific_fn: = specific_function %AnyParam.as.Destroy.impl.Op.422, @AnyParam.as.Destroy.impl.Op(%GenericClass.type, %GenericClass.generic) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.bde, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -2247,27 +1941,18 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Y = %PackageHasParam.Y // CHECK:STDOUT: import PackageHasParam//default // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %PackageHasParam.AnyParam: %AnyParam.type = import_ref PackageHasParam//default, AnyParam, loaded [concrete = constants.%AnyParam.generic] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.1: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.1: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] +// CHECK:STDOUT: %PackageHasParam.import_ref.5ab: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] +// CHECK:STDOUT: %PackageHasParam.import_ref.34c: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: %PackageHasParam.import_ref.8f2: = import_ref PackageHasParam//default, loc4_34, loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst38 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.Y: type = import_ref PackageHasParam//default, Y, loaded [concrete = constants.%Y.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.0f3 = import_ref PackageHasParam//default, inst99 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.0f3 = import_ref PackageHasParam//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.f69: %Y.assoc_type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%assoc0.494] // CHECK:STDOUT: %PackageHasParam.K: %Y.K.type = import_ref PackageHasParam//default, K, loaded [concrete = constants.%Y.K] -// CHECK:STDOUT: %PackageHasParam.import_ref.28c: %Y.type = import_ref PackageHasParam//default, inst99 [no loc], loaded [symbolic = constants.%Self.2f4] +// CHECK:STDOUT: %PackageHasParam.import_ref.28c: %Y.type = import_ref PackageHasParam//default, inst44 [no loc], loaded [symbolic = constants.%Self.2f4] // CHECK:STDOUT: %PackageHasParam.import_ref.ce2: %Y.K.type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%Y.K] -// CHECK:STDOUT: %PackageHasParam.import_ref.043: = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.07c)] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.2: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.2: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] -// CHECK:STDOUT: %PackageHasParam.import_ref.cdc: type = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %PackageHasParam.import_ref.e45: type = import_ref PackageHasParam//default, inst41 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.f8b: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type.694) = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op.1db)] -// CHECK:STDOUT: %Destroy.impl_witness_table.761 = impl_witness_table (%PackageHasParam.import_ref.f8b), @AnyParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.3: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.3: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2305,35 +1990,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = (imports.%PackageHasParam.K) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @GenericClass.as.Destroy.impl(@GenericClass.%U.loc6_20.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %GenericClass: type = class_type @GenericClass, @GenericClass(%U) [symbolic = %GenericClass (constants.%GenericClass)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @GenericClass.%Destroy.impl_witness_table, @GenericClass.as.Destroy.impl(%U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.102)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %GenericClass.as.Destroy.impl.Op.type: type = fn_type @GenericClass.as.Destroy.impl.Op, @GenericClass.as.Destroy.impl(%U) [symbolic = %GenericClass.as.Destroy.impl.Op.type (constants.%GenericClass.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %GenericClass.as.Destroy.impl.Op: @GenericClass.as.Destroy.impl.%GenericClass.as.Destroy.impl.Op.type (%GenericClass.as.Destroy.impl.Op.type) = struct_value () [symbolic = %GenericClass.as.Destroy.impl.Op (constants.%GenericClass.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @GenericClass.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %GenericClass.as.Destroy.impl.Op.decl: @GenericClass.as.Destroy.impl.%GenericClass.as.Destroy.impl.Op.type (%GenericClass.as.Destroy.impl.Op.type) = fn_decl @GenericClass.as.Destroy.impl.Op [symbolic = @GenericClass.as.Destroy.impl.%GenericClass.as.Destroy.impl.Op (constants.%GenericClass.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @GenericClass.as.Destroy.impl.Op.%pattern_type (%pattern_type.0e2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @GenericClass.as.Destroy.impl.Op.%pattern_type (%pattern_type.0e2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_30.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @GenericClass.as.Destroy.impl.Op.%ptr (%ptr.b1a) = value_param call_param0 -// CHECK:STDOUT: %.loc6_30.2: type = splice_block %Self.ref [symbolic = %GenericClass (constants.%GenericClass)] { -// CHECK:STDOUT: %.loc6_30.3: type = specific_constant constants.%GenericClass, @GenericClass(constants.%U) [symbolic = %GenericClass (constants.%GenericClass)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_30.3 [symbolic = %GenericClass (constants.%GenericClass)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @GenericClass.as.Destroy.impl.Op.%ptr (%ptr.b1a) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %GenericClass.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @GenericClass.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// 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.patt: %pattern_type.64f = binding_pattern self [concrete] @@ -2349,32 +2005,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = file.%Y.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @AnyParam.as.Destroy.impl(imports.%PackageHasParam.import_ref.5ab3ec.2: type, imports.%PackageHasParam.import_ref.34c075.2: @AnyParam.%T (%T)) [from "has_param.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.07c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %AnyParam.as.Destroy.impl.Op.type (constants.%AnyParam.as.Destroy.impl.Op.type.694)] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type.694) = struct_value () [symbolic = %AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op.1db)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%PackageHasParam.import_ref.cdc as imports.%PackageHasParam.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%PackageHasParam.import_ref.043 -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericClass(%U.loc6_20.2: type) { // CHECK:STDOUT: %U.loc6_20.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc6_20.1 (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%GenericClass [symbolic = @GenericClass.as.Destroy.impl.%GenericClass (constants.%GenericClass)] -// CHECK:STDOUT: impl_decl @GenericClass.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@GenericClass.as.Destroy.impl.%GenericClass.as.Destroy.impl.Op.decl), @GenericClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @GenericClass.as.Destroy.impl(constants.%U) [symbolic = @GenericClass.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.102)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -2383,13 +2019,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab3ec.1: type, imports.%PackageHasParam.import_ref.34c075.1: @AnyParam.%T (%T)) [from "has_param.carbon"] { +// CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab: type, imports.%PackageHasParam.import_ref.34c: @AnyParam.%T (%T)) [from "has_param.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %X: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: complete_type_witness = imports.%PackageHasParam.import_ref.8f2 @@ -2399,17 +2034,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @GenericClass.as.Destroy.impl.Op(@GenericClass.%U.loc6_20.2: type) { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %GenericClass: type = class_type @GenericClass, @GenericClass(%U) [symbolic = %GenericClass (constants.%GenericClass)] -// CHECK:STDOUT: %ptr: type = ptr_type %GenericClass [symbolic = %ptr (constants.%ptr.b1a)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.0e2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @GenericClass.as.Destroy.impl.Op.%ptr (%ptr.b1a)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @Y.K(imports.%PackageHasParam.import_ref.28c: %Y.type) [from "has_param.carbon"] { // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.2f4)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.84b)] @@ -2435,8 +2059,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %obj.var: ref %AnyParam.0dd = var %obj.var_patt // CHECK:STDOUT: %.loc13_54.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc13_54.2: init %AnyParam.0dd = class_init (), %obj.var [concrete = constants.%AnyParam.val] -// CHECK:STDOUT: %.loc13_3: init %AnyParam.0dd = converted %.loc13_54.1, %.loc13_54.2 [concrete = constants.%AnyParam.val] -// CHECK:STDOUT: assign %obj.var, %.loc13_3 +// CHECK:STDOUT: %.loc13_3.1: init %AnyParam.0dd = converted %.loc13_54.1, %.loc13_54.2 [concrete = constants.%AnyParam.val] +// CHECK:STDOUT: assign %obj.var, %.loc13_3.1 // CHECK:STDOUT: %.loc13_49: type = splice_block %AnyParam [concrete = constants.%AnyParam.0dd] { // CHECK:STDOUT: %PackageHasParam.ref.loc13: = name_ref PackageHasParam, imports.%PackageHasParam [concrete = imports.%PackageHasParam] // CHECK:STDOUT: %AnyParam.ref: %AnyParam.type = name_ref AnyParam, imports.%PackageHasParam.AnyParam [concrete = constants.%AnyParam.generic] @@ -2452,43 +2076,20 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %bound_method.loc14: = bound_method %obj.ref, %impl.elem0 // CHECK:STDOUT: %.loc14: %AnyParam.0dd = bind_value %obj.ref // CHECK:STDOUT: %AnyParam.as.Y.impl.K.call: init %empty_tuple.type = call %bound_method.loc14(%.loc14) -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.bound: = bound_method %obj.var, constants.%AnyParam.as.Destroy.impl.Op.422 -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AnyParam.as.Destroy.impl.Op.422, @AnyParam.as.Destroy.impl.Op(constants.%GenericClass.type, constants.%GenericClass.generic) [concrete = constants.%AnyParam.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc13: = bound_method %obj.var, %AnyParam.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%AnyParam.0dd, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc13_3.2: %type_where = converted constants.%AnyParam.0dd, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %obj.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.bde +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.bde, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc13: = bound_method %obj.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.d96 = addr_of %obj.var -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc13(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc13(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @AnyParam.as.Destroy.impl.Op(imports.%PackageHasParam.import_ref.5ab3ec.3: type, imports.%PackageHasParam.import_ref.34c075.3: @AnyParam.%T (%T)) [from "has_param.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.Op.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %ptr: type = ptr_type %AnyParam [symbolic = %ptr (constants.%ptr.4a9)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.84c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @GenericClass(constants.%U) { // CHECK:STDOUT: %U.loc6_20.1 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @GenericClass.as.Destroy.impl(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %GenericClass => constants.%GenericClass -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.102 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @GenericClass.as.Destroy.impl.Op(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %GenericClass => constants.%GenericClass -// CHECK:STDOUT: %ptr => constants.%ptr.b1a -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.0e2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %X => constants.%X @@ -2501,7 +2102,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.17e // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.398 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.K(constants.%Self.2f4) { @@ -2516,40 +2116,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.64f // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.560 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.07c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl.Op(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.560 -// CHECK:STDOUT: %ptr => constants.%ptr.4a9 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.84c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl(constants.%GenericClass.type, constants.%GenericClass.generic) { -// CHECK:STDOUT: %T => constants.%GenericClass.type -// CHECK:STDOUT: %X => constants.%GenericClass.generic -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.0dd -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.456 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type => constants.%AnyParam.as.Destroy.impl.Op.type.f67 -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op => constants.%AnyParam.as.Destroy.impl.Op.422 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl.Op(constants.%GenericClass.type, constants.%GenericClass.generic) { -// CHECK:STDOUT: %T => constants.%GenericClass.type -// CHECK:STDOUT: %X => constants.%GenericClass.generic -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.0dd -// CHECK:STDOUT: %ptr => constants.%ptr.d96 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.fb7 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- use_generic_class_as_param.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2562,16 +2128,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %AnyParam.560: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic] // CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] -// CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %GenericClass.type: type = generic_class_type @GenericClass [concrete] // CHECK:STDOUT: %GenericClass.generic: %GenericClass.type = struct_value () [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %GenericClass: type = class_type @GenericClass, @GenericClass(%U) [symbolic] // CHECK:STDOUT: %pattern_type.17a: type = pattern_type %GenericClass.type [concrete] // CHECK:STDOUT: %AnyParam.d71: type = class_type @AnyParam, @AnyParam(%GenericClass.type, %GenericClass.generic) [concrete] -// CHECK:STDOUT: %complete_type.426: = complete_type_witness %GenericClass.type [concrete] // CHECK:STDOUT: %pattern_type.312: type = pattern_type %AnyParam.d71 [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.d71 = struct_value () [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] @@ -2589,22 +2151,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.07c: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type.694: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.1db: %AnyParam.as.Destroy.impl.Op.type.694 = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.4a9: type = ptr_type %AnyParam.560 [symbolic] -// CHECK:STDOUT: %pattern_type.84c: type = pattern_type %ptr.4a9 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.ae4: = impl_witness imports.%Destroy.impl_witness_table.0e5, @GenericClass.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %GenericClass.as.Destroy.impl.Op.type: type = fn_type @GenericClass.as.Destroy.impl.Op, @GenericClass.as.Destroy.impl(%U) [symbolic] -// CHECK:STDOUT: %GenericClass.as.Destroy.impl.Op: %GenericClass.as.Destroy.impl.Op.type = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.d95: type = ptr_type %GenericClass [symbolic] -// CHECK:STDOUT: %pattern_type.327: type = pattern_type %ptr.d95 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.156: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%GenericClass.type, %GenericClass.generic) [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type.cf0: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%GenericClass.type, %GenericClass.generic) [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.5b1: %AnyParam.as.Destroy.impl.Op.type.cf0 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %AnyParam.d71, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.1a0: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.1aa: %AggregateT.as_type.as.Destroy.impl.Op.type.1a0 = struct_value () [concrete] // CHECK:STDOUT: %ptr.8ee: type = ptr_type %AnyParam.d71 [concrete] -// CHECK:STDOUT: %pattern_type.470: type = pattern_type %ptr.8ee [concrete] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.specific_fn: = specific_function %AnyParam.as.Destroy.impl.Op.5b1, @AnyParam.as.Destroy.impl.Op(%GenericClass.type, %GenericClass.generic) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.1aa, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -2623,42 +2175,26 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: import PackageGenericClass//default // CHECK:STDOUT: } // CHECK:STDOUT: %PackageHasParam.AnyParam: %AnyParam.type = import_ref PackageHasParam//default, AnyParam, loaded [concrete = constants.%AnyParam.generic] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.1: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.1: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] +// CHECK:STDOUT: %PackageHasParam.import_ref.5ab: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] +// CHECK:STDOUT: %PackageHasParam.import_ref.34c: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: %PackageHasParam.import_ref.8f2: = import_ref PackageHasParam//default, loc4_34, loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst38 [no loc], unloaded // CHECK:STDOUT: %PackageGenericClass.GenericClass: %GenericClass.type = import_ref PackageGenericClass//default, GenericClass, loaded [concrete = constants.%GenericClass.generic] -// CHECK:STDOUT: %PackageGenericClass.import_ref.5ab3ec.1: type = import_ref PackageGenericClass//default, loc6_20, loaded [symbolic = @GenericClass.%U (constants.%U)] +// CHECK:STDOUT: %PackageGenericClass.import_ref.5ab: type = import_ref PackageGenericClass//default, loc6_20, loaded [symbolic = @GenericClass.%U (constants.%U)] // CHECK:STDOUT: %PackageGenericClass.import_ref.8f2: = import_ref PackageGenericClass//default, loc6_31, loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %PackageGenericClass.import_ref.065 = import_ref PackageGenericClass//default, inst31 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.Y: type = import_ref PackageHasParam//default, Y, loaded [concrete = constants.%Y.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.0f3 = import_ref PackageHasParam//default, inst99 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.0f3 = import_ref PackageHasParam//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.f69: %Y.assoc_type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%assoc0.494] // CHECK:STDOUT: %PackageHasParam.K = import_ref PackageHasParam//default, K, unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.ce2: %Y.K.type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%Y.K] -// CHECK:STDOUT: %PackageHasParam.import_ref.28c: %Y.type = import_ref PackageHasParam//default, inst99 [no loc], loaded [symbolic = constants.%Self.2f4] +// CHECK:STDOUT: %PackageHasParam.import_ref.28c: %Y.type = import_ref PackageHasParam//default, inst44 [no loc], loaded [symbolic = constants.%Self.2f4] // CHECK:STDOUT: %PackageGenericClass.import_ref.812: = import_ref PackageGenericClass//default, loc8_66, loaded [concrete = constants.%Y.impl_witness] // CHECK:STDOUT: %PackageGenericClass.import_ref.a0e: type = import_ref PackageGenericClass//default, loc8_43, loaded [concrete = constants.%AnyParam.d71] // CHECK:STDOUT: %PackageGenericClass.import_ref.ca6: type = import_ref PackageGenericClass//default, loc8_63, loaded [concrete = constants.%Y.type] // CHECK:STDOUT: %PackageGenericClass.import_ref.434: %AnyParam.as.Y.impl.K.type = import_ref PackageGenericClass//default, loc9_22, loaded [concrete = constants.%AnyParam.as.Y.impl.K] // CHECK:STDOUT: %Y.impl_witness_table = impl_witness_table (%PackageGenericClass.import_ref.434), @AnyParam.as.Y.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.043: = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.07c)] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.2: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.2: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] -// CHECK:STDOUT: %PackageHasParam.import_ref.cdc: type = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %PackageHasParam.import_ref.e45: type = import_ref PackageHasParam//default, inst41 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.f8b: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type.694) = import_ref PackageHasParam//default, loc4_33, loaded [symbolic = @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op.1db)] -// CHECK:STDOUT: %Destroy.impl_witness_table.761 = impl_witness_table (%PackageHasParam.import_ref.f8b), @AnyParam.as.Destroy.impl [concrete] -// CHECK:STDOUT: %PackageHasParam.import_ref.5ab3ec.3: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] -// CHECK:STDOUT: %PackageHasParam.import_ref.34c075.3: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] -// CHECK:STDOUT: %PackageGenericClass.import_ref.c5d = import_ref PackageGenericClass//default, loc6_30, unloaded -// CHECK:STDOUT: %PackageGenericClass.import_ref.5ab3ec.2: type = import_ref PackageGenericClass//default, loc6_20, loaded [symbolic = @GenericClass.%U (constants.%U)] -// CHECK:STDOUT: %PackageGenericClass.import_ref.5a9: type = import_ref PackageGenericClass//default, loc6_30, loaded [symbolic = @GenericClass.as.Destroy.impl.%GenericClass (constants.%GenericClass)] -// CHECK:STDOUT: %PackageGenericClass.import_ref.e45: type = import_ref PackageGenericClass//default, inst34 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %PackageGenericClass.import_ref.bea = import_ref PackageGenericClass//default, loc6_30, unloaded -// CHECK:STDOUT: %Destroy.impl_witness_table.0e5 = impl_witness_table (%PackageGenericClass.import_ref.bea), @GenericClass.as.Destroy.impl [concrete] -// CHECK:STDOUT: %PackageGenericClass.import_ref.5ab3ec.3: type = import_ref PackageGenericClass//default, loc6_20, loaded [symbolic = @GenericClass.%U (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2686,44 +2222,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = imports.%PackageGenericClass.import_ref.812 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @AnyParam.as.Destroy.impl(imports.%PackageHasParam.import_ref.5ab3ec.2: type, imports.%PackageHasParam.import_ref.34c075.2: @AnyParam.%T (%T)) [from "has_param.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.761, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.07c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type: type = fn_type @AnyParam.as.Destroy.impl.Op, @AnyParam.as.Destroy.impl(%T, %X) [symbolic = %AnyParam.as.Destroy.impl.Op.type (constants.%AnyParam.as.Destroy.impl.Op.type.694)] -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op: @AnyParam.as.Destroy.impl.%AnyParam.as.Destroy.impl.Op.type (%AnyParam.as.Destroy.impl.Op.type.694) = struct_value () [symbolic = %AnyParam.as.Destroy.impl.Op (constants.%AnyParam.as.Destroy.impl.Op.1db)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%PackageHasParam.import_ref.cdc as imports.%PackageHasParam.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%PackageHasParam.import_ref.043 -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic impl @GenericClass.as.Destroy.impl(imports.%PackageGenericClass.import_ref.5ab3ec.2: type) [from "has_generic_class.carbon"] { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %GenericClass: type = class_type @GenericClass, @GenericClass(%U) [symbolic = %GenericClass (constants.%GenericClass)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.0e5, @GenericClass.as.Destroy.impl(%U) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.ae4)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %GenericClass.as.Destroy.impl.Op.type: type = fn_type @GenericClass.as.Destroy.impl.Op, @GenericClass.as.Destroy.impl(%U) [symbolic = %GenericClass.as.Destroy.impl.Op.type (constants.%GenericClass.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %GenericClass.as.Destroy.impl.Op: @GenericClass.as.Destroy.impl.%GenericClass.as.Destroy.impl.Op.type (%GenericClass.as.Destroy.impl.Op.type) = struct_value () [symbolic = %GenericClass.as.Destroy.impl.Op (constants.%GenericClass.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%PackageGenericClass.import_ref.5a9 as imports.%PackageGenericClass.import_ref.e45 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%PackageGenericClass.import_ref.c5d -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab3ec.1: type, imports.%PackageHasParam.import_ref.34c075.1: @AnyParam.%T (%T)) [from "has_param.carbon"] { +// CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab: type, imports.%PackageHasParam.import_ref.34c: @AnyParam.%T (%T)) [from "has_param.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %X: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: complete_type_witness = imports.%PackageHasParam.import_ref.8f2 @@ -2733,7 +2237,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic class @GenericClass(imports.%PackageGenericClass.import_ref.5ab3ec.1: type) [from "has_generic_class.carbon"] { +// CHECK:STDOUT: generic class @GenericClass(imports.%PackageGenericClass.import_ref.5ab: type) [from "has_generic_class.carbon"] { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2755,8 +2259,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %obj.var: ref %AnyParam.d71 = var %obj.var_patt // CHECK:STDOUT: %.loc8_74.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc8_74.2: init %AnyParam.d71 = class_init (), %obj.var [concrete = constants.%AnyParam.val] -// CHECK:STDOUT: %.loc8_3: init %AnyParam.d71 = converted %.loc8_74.1, %.loc8_74.2 [concrete = constants.%AnyParam.val] -// CHECK:STDOUT: assign %obj.var, %.loc8_3 +// CHECK:STDOUT: %.loc8_3.1: init %AnyParam.d71 = converted %.loc8_74.1, %.loc8_74.2 [concrete = constants.%AnyParam.val] +// CHECK:STDOUT: assign %obj.var, %.loc8_3.1 // CHECK:STDOUT: %.loc8_69: type = splice_block %AnyParam [concrete = constants.%AnyParam.d71] { // CHECK:STDOUT: %PackageHasParam.ref.loc8: = name_ref PackageHasParam, imports.%PackageHasParam [concrete = imports.%PackageHasParam] // CHECK:STDOUT: %AnyParam.ref: %AnyParam.type = name_ref AnyParam, imports.%PackageHasParam.AnyParam [concrete = constants.%AnyParam.generic] @@ -2773,11 +2277,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %bound_method.loc9: = bound_method %obj.ref, %impl.elem0 // CHECK:STDOUT: %.loc9: %AnyParam.d71 = bind_value %obj.ref // CHECK:STDOUT: %AnyParam.as.Y.impl.K.call: init %empty_tuple.type = call %bound_method.loc9(%.loc9) -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.bound: = bound_method %obj.var, constants.%AnyParam.as.Destroy.impl.Op.5b1 -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AnyParam.as.Destroy.impl.Op.5b1, @AnyParam.as.Destroy.impl.Op(constants.%GenericClass.type, constants.%GenericClass.generic) [concrete = constants.%AnyParam.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc8: = bound_method %obj.var, %AnyParam.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%AnyParam.d71, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_3.2: %type_where = converted constants.%AnyParam.d71, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %obj.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.1aa +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.1aa, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc8: = bound_method %obj.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.8ee = addr_of %obj.var -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2794,29 +2300,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: fn @AnyParam.as.Y.impl.K [from "has_generic_class.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @AnyParam.as.Destroy.impl.Op(imports.%PackageHasParam.import_ref.5ab3ec.3: type, imports.%PackageHasParam.import_ref.34c075.3: @AnyParam.%T (%T)) [from "has_param.carbon"] { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %X: @AnyParam.as.Destroy.impl.Op.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic = %AnyParam (constants.%AnyParam.560)] -// CHECK:STDOUT: %ptr: type = ptr_type %AnyParam [symbolic = %ptr (constants.%ptr.4a9)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.84c)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @GenericClass.as.Destroy.impl.Op(imports.%PackageGenericClass.import_ref.5ab3ec.3: type) [from "has_generic_class.carbon"] { -// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %GenericClass: type = class_type @GenericClass, @GenericClass(%U) [symbolic = %GenericClass (constants.%GenericClass)] -// CHECK:STDOUT: %ptr: type = ptr_type %GenericClass [symbolic = %ptr (constants.%ptr.d95)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.327)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %X => constants.%X @@ -2833,7 +2316,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.17a // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.426 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Y.K(constants.%Self.2f4) { @@ -2842,53 +2324,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e57 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.560 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.07c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl.Op(constants.%T, constants.%X) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.560 -// CHECK:STDOUT: %ptr => constants.%ptr.4a9 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.84c -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @GenericClass.as.Destroy.impl(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %GenericClass => constants.%GenericClass -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.ae4 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @GenericClass.as.Destroy.impl.Op(constants.%U) { -// CHECK:STDOUT: %U => constants.%U -// CHECK:STDOUT: %GenericClass => constants.%GenericClass -// CHECK:STDOUT: %ptr => constants.%ptr.d95 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.327 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl(constants.%GenericClass.type, constants.%GenericClass.generic) { -// CHECK:STDOUT: %T => constants.%GenericClass.type -// CHECK:STDOUT: %X => constants.%GenericClass.generic -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.d71 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.156 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op.type => constants.%AnyParam.as.Destroy.impl.Op.type.cf0 -// CHECK:STDOUT: %AnyParam.as.Destroy.impl.Op => constants.%AnyParam.as.Destroy.impl.Op.5b1 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam.as.Destroy.impl.Op(constants.%GenericClass.type, constants.%GenericClass.generic) { -// CHECK:STDOUT: %T => constants.%GenericClass.type -// CHECK:STDOUT: %X => constants.%GenericClass.generic -// CHECK:STDOUT: %AnyParam => constants.%AnyParam.d71 -// CHECK:STDOUT: %ptr => constants.%ptr.8ee -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.470 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- has_extra_interfaces.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2915,19 +2350,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %Self.as_type.a67: type = facet_access_type %Self.7ee [symbolic] -// CHECK:STDOUT: %pattern_type.d22: type = pattern_type %Self.as_type.a67 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.7ee [symbolic] +// CHECK:STDOUT: %pattern_type.d22: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %I.F.type: type = fn_type @I.F [concrete] // CHECK:STDOUT: %I.F: %I.F.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -2944,11 +2372,9 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -3070,13 +2496,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type.d22) = binding_pattern self [concrete] // CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.d22) = value_param_pattern %self.patt, call_param0 [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc14_26.1 (%Self.as_type.a67) = value_param call_param0 -// CHECK:STDOUT: %.loc14_26.1: type = splice_block %.loc14_26.2 [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type.a67)] { +// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc14_26.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc14_26.1: type = splice_block %.loc14_26.2 [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type)] { // CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %Self.as_type.loc14_26.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type.a67)] -// CHECK:STDOUT: %.loc14_26.2: type = converted %Self.ref, %Self.as_type.loc14_26.2 [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type.a67)] +// CHECK:STDOUT: %Self.as_type.loc14_26.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc14_26.2: type = converted %Self.ref, %Self.as_type.loc14_26.2 [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc14_26.1 (%Self.as_type.a67) = bind_name self, %self.param +// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc14_26.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.F.decl [concrete = constants.%assoc0] // CHECK:STDOUT: @@ -3086,35 +2512,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = (%I.F.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc13_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc13_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc13_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc13_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// 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.patt: %pattern_type.fc9 = binding_pattern self [concrete] @@ -3136,10 +2533,6 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -3148,23 +2541,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc13_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %Self.as_type.loc14_26.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type.a67)] +// CHECK:STDOUT: %Self.as_type.loc14_26.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc14_26.1 [symbolic = %pattern_type (constants.%pattern_type.d22)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc14_26.1 (%Self.as_type.a67)); +// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc14_26.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.I.impl.F(%self.param: %C.763) { @@ -3176,22 +2558,9 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T.loc13_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @I.F(constants.%Self.7ee) { // CHECK:STDOUT: %Self => constants.%Self.7ee -// CHECK:STDOUT: %Self.as_type.loc14_26.1 => constants.%Self.as_type.a67 +// CHECK:STDOUT: %Self.as_type.loc14_26.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d22 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -3254,11 +2623,11 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasExtraInterfaces.import_ref.8f2: = import_ref HasExtraInterfaces//default, loc13_20, loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %HasExtraInterfaces.import_ref.4c0 = import_ref HasExtraInterfaces//default, inst69 [no loc], unloaded // CHECK:STDOUT: %HasExtraInterfaces.I: type = import_ref HasExtraInterfaces//default, I, loaded [concrete = constants.%I.type] -// CHECK:STDOUT: %HasExtraInterfaces.import_ref.8e7 = import_ref HasExtraInterfaces//default, inst125 [no loc], unloaded +// CHECK:STDOUT: %HasExtraInterfaces.import_ref.8e7 = import_ref HasExtraInterfaces//default, inst75 [no loc], unloaded // CHECK:STDOUT: %HasExtraInterfaces.import_ref.be9: %I.assoc_type = import_ref HasExtraInterfaces//default, loc14_33, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %HasExtraInterfaces.F = import_ref HasExtraInterfaces//default, F, unloaded // CHECK:STDOUT: %HasExtraInterfaces.import_ref.d54: %I.F.type = import_ref HasExtraInterfaces//default, loc14_33, loaded [concrete = constants.%I.F] -// CHECK:STDOUT: %HasExtraInterfaces.import_ref.59a: %I.type = import_ref HasExtraInterfaces//default, inst125 [no loc], loaded [symbolic = constants.%Self.caa] +// CHECK:STDOUT: %HasExtraInterfaces.import_ref.59a: %I.type = import_ref HasExtraInterfaces//default, inst75 [no loc], loaded [symbolic = constants.%Self.caa] // CHECK:STDOUT: %HasExtraInterfaces.import_ref.80c = import_ref HasExtraInterfaces//default, loc16_79, unloaded // CHECK:STDOUT: %HasExtraInterfaces.import_ref.23a = import_ref HasExtraInterfaces//default, inst54 [no loc], unloaded // CHECK:STDOUT: %HasExtraInterfaces.import_ref.a8e = import_ref HasExtraInterfaces//default, inst49 [no loc], unloaded diff --git a/toolchain/check/testdata/impl/lookup/instance_method.carbon b/toolchain/check/testdata/impl/lookup/instance_method.carbon index 74bbbe98182b..b0ea07894b45 100644 --- a/toolchain/check/testdata/impl/lookup/instance_method.carbon +++ b/toolchain/check/testdata/impl/lookup/instance_method.carbon @@ -33,9 +33,9 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %Self.as_type.a67: type = facet_access_type %Self.7ee [symbolic] -// CHECK:STDOUT: %pattern_type.d22: type = pattern_type %Self.as_type.a67 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.d22: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %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] @@ -50,13 +50,6 @@ fn F(c: C) -> i32 { // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %F.type: type = fn_type @F [concrete] @@ -67,12 +60,10 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -103,7 +94,7 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %I.F.decl: %I.F.type = fn_decl @I.F [concrete = constants.%I.F] { // CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type.d22) = binding_pattern self [concrete] // CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.d22) = value_param_pattern %self.patt, call_param0 [concrete] @@ -112,13 +103,13 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] -// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc18_14.1 (%Self.as_type.a67) = value_param call_param0 -// CHECK:STDOUT: %.loc18_14.1: type = splice_block %.loc18_14.2 [symbolic = %Self.as_type.loc18_14.1 (constants.%Self.as_type.a67)] { -// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %Self.as_type.loc18_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc18_14.1 (constants.%Self.as_type.a67)] -// CHECK:STDOUT: %.loc18_14.2: type = converted %Self.ref, %Self.as_type.loc18_14.2 [symbolic = %Self.as_type.loc18_14.1 (constants.%Self.as_type.a67)] +// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc18_14.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc18_14.1: type = splice_block %.loc18_14.2 [symbolic = %Self.as_type.loc18_14.1 (constants.%Self.as_type)] { +// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc18_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc18_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc18_14.2: type = converted %Self.ref, %Self.as_type.loc18_14.2 [symbolic = %Self.as_type.loc18_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc18_14.1 (%Self.as_type.a67) = bind_name self, %self.param +// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc18_14.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param1 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } @@ -151,22 +142,6 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: witness = @C.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc21: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -174,10 +149,6 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (@C.as.I.impl.%C.as.I.impl.F.decl), @C.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -189,17 +160,15 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %Self.as_type.loc18_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_14.1 (constants.%Self.as_type.a67)] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc18_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_14.1 [symbolic = %pattern_type (constants.%pattern_type.d22)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc18_14.1 (%Self.as_type.a67)) -> %i32; +// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc18_14.1 (%Self.as_type)) -> %i32; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.I.impl.F(%self.param: %C) -> %i32; // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param: %C) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %c.ref: %C = name_ref c, %c @@ -210,9 +179,9 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: return %C.as.I.impl.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @I.F(constants.%Self.7ee) { -// CHECK:STDOUT: %Self => constants.%Self.7ee -// CHECK:STDOUT: %Self.as_type.loc18_14.1 => constants.%Self.as_type.a67 +// CHECK:STDOUT: specific @I.F(constants.%Self) { +// CHECK:STDOUT: %Self => constants.%Self +// CHECK:STDOUT: %Self.as_type.loc18_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d22 // CHECK:STDOUT: } // CHECK:STDOUT: 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 8e23a27f8e42..5dc130a21f3b 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 @@ -125,13 +125,6 @@ fn F() { // CHECK:STDOUT: %pattern_type.ce6: type = pattern_type %Y_where.type.197 [symbolic] // CHECK:STDOUT: %Outer.G.type.d49: type = fn_type @Outer.G, @Outer(%OuterParam) [symbolic] // CHECK:STDOUT: %Outer.G.f3c: %Outer.G.type.d49 = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%OuterParam) [symbolic] -// CHECK:STDOUT: %ptr.6ff: type = ptr_type %Outer.9d6 [symbolic] -// CHECK:STDOUT: %pattern_type.07e: type = pattern_type %ptr.6ff [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%OuterParam) [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = 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: %C: type = class_type @C [concrete] @@ -158,11 +151,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -233,35 +224,6 @@ fn F() { // CHECK:STDOUT: assoc_const T:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Outer.as.Destroy.impl(@Outer.%OuterParam.loc49_13.2: type) { -// CHECK:STDOUT: %OuterParam: type = bind_symbolic_name OuterParam, 0 [symbolic = %OuterParam (constants.%OuterParam)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%OuterParam) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%OuterParam) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%OuterParam) [symbolic = %Outer.as.Destroy.impl.Op.type (constants.%Outer.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = fn_decl @Outer.as.Destroy.impl.Op [symbolic = @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.07e) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc49_32.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = value_param call_param0 -// CHECK:STDOUT: %.loc49_32.2: type = splice_block %Self.ref [symbolic = %Outer (constants.%Outer.9d6)] { -// CHECK:STDOUT: %.loc49_32.3: type = specific_constant constants.%Outer.9d6, @Outer(constants.%OuterParam) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc49_32.3 [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.Y.impl: %C.ref as %.loc58_23 { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Y.impl_witness @@ -300,10 +262,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %H.loc54_8.2: @Outer.G.%Y_where.type (%Y_where.type.197) = bind_symbolic_name H, 1 [symbolic = %H.loc54_8.1 (constants.%H)] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer.9d6 [symbolic = @Outer.as.Destroy.impl.%Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Outer.as.Destroy.impl(constants.%OuterParam) [symbolic = @Outer.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -338,17 +296,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Outer.as.Destroy.impl.Op(@Outer.%OuterParam.loc49_13.2: type) { -// CHECK:STDOUT: %OuterParam: type = bind_symbolic_name OuterParam, 0 [symbolic = %OuterParam (constants.%OuterParam)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%OuterParam) [symbolic = %Outer (constants.%Outer.9d6)] -// CHECK:STDOUT: %ptr: type = ptr_type %Outer [symbolic = %ptr (constants.%ptr.6ff)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.07e)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.6ff)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Outer.ref: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] @@ -402,19 +349,6 @@ fn F() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.ce6 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl(constants.%OuterParam) { -// CHECK:STDOUT: %OuterParam => constants.%OuterParam -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl.Op(constants.%OuterParam) { -// CHECK:STDOUT: %OuterParam => constants.%OuterParam -// CHECK:STDOUT: %Outer => constants.%Outer.9d6 -// CHECK:STDOUT: %ptr => constants.%ptr.6ff -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.07e -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%empty_tuple.type) { // CHECK:STDOUT: %OuterParam.loc49_13.1 => constants.%empty_tuple.type // CHECK:STDOUT: @@ -484,13 +418,6 @@ fn F() { // CHECK:STDOUT: %C.47f: type = class_type @C, @C(%OuterParam) [symbolic] // CHECK:STDOUT: %require_complete.e67: = require_complete_type %Y_where.type.6e4 [symbolic] // CHECK:STDOUT: %Y.impl_witness.d06: = impl_witness @Outer.%Y.impl_witness_table, @C.as.Y.impl(%OuterParam) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%OuterParam) [symbolic] -// CHECK:STDOUT: %ptr.d11: type = ptr_type %Outer.bbd [symbolic] -// CHECK:STDOUT: %pattern_type.e77: type = pattern_type %ptr.d11 [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%OuterParam) [symbolic] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: %Outer.as.Destroy.impl.Op.type = 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: %Z1.impl_witness: = impl_witness file.%Z1.impl_witness_table [concrete] @@ -533,12 +460,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .BitAndWith = %Core.BitAndWith // 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.BitAndWith: %BitAndWith.type.f2e = import_ref Core//prelude/parts/as, BitAndWith, loaded [concrete = constants.%BitAndWith.generic] // CHECK:STDOUT: %Core.import_ref.636: %type.as.BitAndWith.impl.Op.type = import_ref Core//prelude/parts/as, loc25_42, loaded [concrete = constants.%type.as.BitAndWith.impl.Op] // CHECK:STDOUT: %BitAndWith.impl_witness_table = impl_witness_table (%Core.import_ref.636), @type.as.BitAndWith.impl [concrete] @@ -645,35 +570,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @Outer.as.Destroy.impl(@Outer.%OuterParam.loc6_13.2: %Z1.type) { -// CHECK:STDOUT: %OuterParam: %Z1.type = bind_symbolic_name OuterParam, 0 [symbolic = %OuterParam (constants.%OuterParam)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%OuterParam) [symbolic = %Outer (constants.%Outer.bbd)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Outer.%Destroy.impl_witness_table, @Outer.as.Destroy.impl(%OuterParam) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.type: type = fn_type @Outer.as.Destroy.impl.Op, @Outer.as.Destroy.impl(%OuterParam) [symbolic = %Outer.as.Destroy.impl.Op.type (constants.%Outer.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = struct_value () [symbolic = %Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @Outer.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Outer.as.Destroy.impl.Op.decl: @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.type (%Outer.as.Destroy.impl.Op.type) = fn_decl @Outer.as.Destroy.impl.Op [symbolic = @Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op (constants.%Outer.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.e77) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @Outer.as.Destroy.impl.Op.%pattern_type (%pattern_type.e77) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_30.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.d11) = value_param call_param0 -// CHECK:STDOUT: %.loc6_30.2: type = splice_block %Self.ref [symbolic = %Outer (constants.%Outer.bbd)] { -// CHECK:STDOUT: %.loc6_30.3: type = specific_constant constants.%Outer.bbd, @Outer(constants.%OuterParam) [symbolic = %Outer (constants.%Outer.bbd)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_30.3 [symbolic = %Outer (constants.%Outer.bbd)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @Outer.as.Destroy.impl.Op.%ptr (%ptr.d11) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Outer.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Outer.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.Z1.impl: %.loc17_7.2 as %Z1.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Z1.impl_witness @@ -741,10 +637,6 @@ fn F() { // CHECK:STDOUT: %Y.impl_witness_table = impl_witness_table (%impl_witness_assoc_constant), @C.as.Y.impl [concrete] // CHECK:STDOUT: %Y.impl_witness: = impl_witness %Y.impl_witness_table, @C.as.Y.impl(constants.%OuterParam) [symbolic = @C.as.Y.impl.%Y.impl_witness (constants.%Y.impl_witness.d06)] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer.bbd [symbolic = @Outer.as.Destroy.impl.%Outer (constants.%Outer.bbd)] -// CHECK:STDOUT: impl_decl @Outer.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Outer.as.Destroy.impl.%Outer.as.Destroy.impl.Op.decl), @Outer.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @Outer.as.Destroy.impl(constants.%OuterParam) [symbolic = @Outer.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -782,17 +674,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Outer.as.Destroy.impl.Op(@Outer.%OuterParam.loc6_13.2: %Z1.type) { -// CHECK:STDOUT: %OuterParam: %Z1.type = bind_symbolic_name OuterParam, 0 [symbolic = %OuterParam (constants.%OuterParam)] -// CHECK:STDOUT: %Outer: type = class_type @Outer, @Outer(%OuterParam) [symbolic = %Outer (constants.%Outer.bbd)] -// CHECK:STDOUT: %ptr: type = ptr_type %Outer [symbolic = %ptr (constants.%ptr.d11)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.e77)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @Outer.as.Destroy.impl.Op.%ptr (%ptr.d11)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Outer.ref.loc21_3: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] @@ -892,19 +773,6 @@ fn F() { // CHECK:STDOUT: %Y.impl_witness => constants.%Y.impl_witness.d06 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl(constants.%OuterParam) { -// CHECK:STDOUT: %OuterParam => constants.%OuterParam -// CHECK:STDOUT: %Outer => constants.%Outer.bbd -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Outer.as.Destroy.impl.Op(constants.%OuterParam) { -// CHECK:STDOUT: %OuterParam => constants.%OuterParam -// CHECK:STDOUT: %Outer => constants.%Outer.bbd -// CHECK:STDOUT: %ptr => constants.%ptr.d11 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e77 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(constants.%Z1.facet) { // CHECK:STDOUT: %OuterParam.loc6_13.1 => constants.%Z1.facet // 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 67330202c3b2..59943dda5d82 100644 --- a/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon +++ b/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon @@ -109,13 +109,6 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Z.assoc_type.26e: type = assoc_entity_type @Z, @Z(%T.8b3) [symbolic] // CHECK:STDOUT: %assoc0.1cd: %Z.assoc_type.26e = assoc_entity element0, @Z.%X [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %S: type = bind_symbolic_name S, 1 [symbolic] @@ -156,11 +149,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -280,22 +271,6 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: assoc_const X:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Z.impl.c87(%T.loc9_14.1: type, %S.loc9_24.1: type) { // CHECK:STDOUT: %T.loc9_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc9_14.2 (constants.%T.8b3)] // CHECK:STDOUT: %S.loc9_24.2: type = bind_symbolic_name S, 1 [symbolic = %S.loc9_24.2 (constants.%S)] @@ -334,10 +309,6 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -345,8 +316,6 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc13_6.2: %Z.type.a71) { // CHECK:STDOUT: %T.loc13_6.1: %Z.type.a71 = bind_symbolic_name T, 0 [symbolic = %T.loc13_6.1 (constants.%T.fcc)] // CHECK:STDOUT: %T.as_type.loc13_19.1: type = facet_access_type %T.loc13_6.1 [symbolic = %T.as_type.loc13_19.1 (constants.%T.as_type)] @@ -464,13 +433,6 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self.045: %Y.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %S: type = bind_symbolic_name S, 1 [symbolic] @@ -523,12 +485,10 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//prelude/parts/as, loc17_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%ImplicitAs.Convert.type (%ImplicitAs.Convert.type.275) = import_ref Core//prelude/parts/as, loc17_35, loaded [symbolic = @ImplicitAs.%ImplicitAs.Convert (constants.%ImplicitAs.Convert.42e)] @@ -662,22 +622,6 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: assoc_const X:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Z.impl.c87(%T.loc10_14.1: type, %S.loc10_24.1: type) { // CHECK:STDOUT: %T.loc10_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc10_14.2 (constants.%T.8b3)] // CHECK:STDOUT: %S.loc10_24.2: type = bind_symbolic_name S, 1 [symbolic = %S.loc10_24.2 (constants.%S)] @@ -716,10 +660,6 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -727,8 +667,6 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc14_6.2: %Z.type.a71) { // CHECK:STDOUT: %T.loc14_6.1: %Z.type.a71 = bind_symbolic_name T, 0 [symbolic = %T.loc14_6.1 (constants.%T.fcc)] // CHECK:STDOUT: %T.as_type.loc14_19.1: type = facet_access_type %T.loc14_6.1 [symbolic = %T.as_type.loc14_19.1 (constants.%T.as_type)] diff --git a/toolchain/check/testdata/impl/lookup/transitive.carbon b/toolchain/check/testdata/impl/lookup/transitive.carbon index 7f2663fc5ffb..2190a2fc8020 100644 --- a/toolchain/check/testdata/impl/lookup/transitive.carbon +++ b/toolchain/check/testdata/impl/lookup/transitive.carbon @@ -116,21 +116,14 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %I.F.type: type = fn_type @I.F [concrete] // CHECK:STDOUT: %I.F: %I.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Self.as_type.a67: type = facet_access_type %Self.7ee [symbolic] -// CHECK:STDOUT: %pattern_type.d22: type = pattern_type %Self.as_type.a67 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.d22: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.as.I.impl.F.type: type = fn_type @C.as.I.impl.F [concrete] @@ -141,15 +134,13 @@ fn Call() { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.I: type = import_ref Main//i, I, loaded [concrete = constants.%I.type] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: %Main.import_ref.8e7 = import_ref Main//i, inst19 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.507 = import_ref Main//i, loc4_33, unloaded // CHECK:STDOUT: %Main.F: %I.F.type = import_ref Main//i, F, loaded [concrete = constants.%I.F] -// CHECK:STDOUT: %Main.import_ref.de2: %I.type = import_ref Main//i, inst19 [no loc], loaded [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Main.import_ref.de2: %I.type = import_ref Main//i, inst19 [no loc], loaded [symbolic = constants.%Self] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -176,22 +167,6 @@ fn Call() { // CHECK:STDOUT: witness = (imports.%Main.F) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] @@ -208,10 +183,6 @@ fn Call() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -219,11 +190,9 @@ fn Call() { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(imports.%Main.import_ref.de2: %I.type) [from "i.carbon"] { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.7ee)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.a67)] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name 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.d22)] // CHECK:STDOUT: // CHECK:STDOUT: fn; @@ -234,9 +203,9 @@ fn Call() { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @I.F(constants.%Self.7ee) { -// CHECK:STDOUT: %Self => constants.%Self.7ee -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.a67 +// CHECK:STDOUT: specific @I.F(constants.%Self) { +// CHECK:STDOUT: %Self => constants.%Self +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.d22 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -304,7 +273,7 @@ fn Call() { // CHECK:STDOUT: %Get: %Get.type = struct_value () [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] +// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -319,10 +288,12 @@ fn Call() { // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.e02: = impl_witness imports.%Destroy.impl_witness_table.04e [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -333,7 +304,7 @@ fn Call() { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Main.import_ref.8db: = import_ref Main//get, inst23 [indirect], loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %Main.import_ref.8db: = import_ref Main//get, inst23 [indirect], loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %Main.import_ref.6a9 = import_ref Main//get, inst24 [indirect], unloaded // CHECK:STDOUT: %Main.import_ref.8e7 = import_ref Main//i, inst19 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.c44: %I.assoc_type = import_ref Main//i, loc4_33, loaded [concrete = constants.%assoc0.3f3] @@ -346,11 +317,6 @@ fn Call() { // CHECK:STDOUT: %Main.import_ref.540: %C.as.I.impl.F.type = import_ref Main//c, loc7_34, loaded [concrete = constants.%C.as.I.impl.F] // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (%Main.import_ref.540), @C.as.I.impl [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.f0a: = import_ref Main//c, loc6_9, loaded [concrete = constants.%Destroy.impl_witness.e02] -// CHECK:STDOUT: %Main.import_ref.0ed: type = import_ref Main//c, loc6_9, loaded [concrete = constants.%C] -// CHECK:STDOUT: %Main.import_ref.e45: type = import_ref Main//c, inst23 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Main.import_ref.b95: %C.as.Destroy.impl.Op.type = import_ref Main//c, loc6_9, loaded [concrete = constants.%C.as.Destroy.impl.Op] -// CHECK:STDOUT: %Destroy.impl_witness_table.04e = impl_witness_table (%Main.import_ref.b95), @C.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -377,11 +343,6 @@ fn Call() { // CHECK:STDOUT: witness = imports.%Main.import_ref.f2d // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: imports.%Main.import_ref.0ed as imports.%Main.import_ref.e45 [from "c.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Main.import_ref.f0a -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C [from "get.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%Main.import_ref.8db // CHECK:STDOUT: @@ -397,13 +358,17 @@ fn Call() { // CHECK:STDOUT: %I.ref: type = name_ref I, imports.%Main.I [concrete = constants.%I.type] // CHECK:STDOUT: %F.ref: %I.assoc_type = name_ref F, imports.%Main.import_ref.c44 [concrete = constants.%assoc0.3f3] // CHECK:STDOUT: %impl.elem0: %.dcb = impl_witness_access constants.%I.impl_witness, element0 [concrete = constants.%C.as.I.impl.F] -// CHECK:STDOUT: %bound_method: = bound_method %Get.call, %impl.elem0 +// CHECK:STDOUT: %bound_method.loc9_8: = bound_method %Get.call, %impl.elem0 // CHECK:STDOUT: %.loc9_7.2: ref %C = temporary %.loc9_7.1, %Get.call // CHECK:STDOUT: %.loc9_7.3: %C = bind_value %.loc9_7.2 -// CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %bound_method(%.loc9_7.3) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc9_7.2, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %bound_method.loc9_8(%.loc9_7.3) +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc9_7.4: %type_where = converted constants.%C, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc9_7.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc9_7: = bound_method %.loc9_7.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.019 = addr_of %.loc9_7.2 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc9_7(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -419,8 +384,6 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.I.impl.F [from "c.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op = "no_op" [from "c.carbon"]; -// CHECK:STDOUT: // CHECK:STDOUT: specific @I.F(constants.%Self.7ee) { // CHECK:STDOUT: %Self => constants.%Self.7ee // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.a67 diff --git a/toolchain/check/testdata/impl/redeclaration.carbon b/toolchain/check/testdata/impl/redeclaration.carbon index ce5cdbd75b04..6182b7eb5755 100644 --- a/toolchain/check/testdata/impl/redeclaration.carbon +++ b/toolchain/check/testdata/impl/redeclaration.carbon @@ -26,20 +26,13 @@ impl i32 as I {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 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: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @X.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = 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: } @@ -47,12 +40,10 @@ impl i32 as I {} // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -79,7 +70,7 @@ impl i32 as I {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self @@ -91,32 +82,12 @@ impl i32 as I {} // CHECK:STDOUT: witness = file.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @X.as.Destroy.impl: @X.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %X.as.Destroy.impl.Op.decl: %X.as.Destroy.impl.Op.type = fn_decl @X.as.Destroy.impl.Op [concrete = constants.%X.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1c6 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1c6 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc19: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d17 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: %self: %ptr.d17 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %X.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @X.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @X { // CHECK:STDOUT: impl_decl @i32.as.I.impl [concrete] {} { // CHECK:STDOUT: %int_32.loc20: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc20: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %I.ref.loc20: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: impl_decl @X.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@X.as.Destroy.impl.%X.as.Destroy.impl.Op.decl), @X.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -125,5 +96,3 @@ impl i32 as I {} // CHECK:STDOUT: .I = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @X.as.Destroy.impl.Op(%self.param: %ptr.d17) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/use_assoc_const.carbon b/toolchain/check/testdata/impl/use_assoc_const.carbon index 90514184a6cc..caa21d55e7f2 100644 --- a/toolchain/check/testdata/impl/use_assoc_const.carbon +++ b/toolchain/check/testdata/impl/use_assoc_const.carbon @@ -349,13 +349,6 @@ fn F() { // CHECK:STDOUT: %int_40.518: %i32 = int_value 40 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %J_where.type.b0a: type = facet_type <@J where %impl.elem0.338 = %C> [concrete] // CHECK:STDOUT: %J.impl_witness.e7d: = impl_witness file.%J.impl_witness_table.loc21 [concrete] @@ -372,7 +365,6 @@ fn F() { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Negate = %Core.Negate // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } @@ -384,7 +376,6 @@ fn F() { // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -527,22 +518,6 @@ fn F() { // CHECK:STDOUT: witness = file.%J.impl_witness.loc8 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc16: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.J.impl: %C.ref.loc21_6 as %.loc21_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.patt: %pattern_type.c48 = binding_pattern self [concrete] @@ -573,10 +548,6 @@ fn F() { // CHECK:STDOUT: %.loc18_10: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc18_11: type = converted %.loc18_10, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: adapt_decl %.loc18_11 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -625,8 +596,6 @@ fn F() { // CHECK:STDOUT: return %empty_tuple.type.as.J.impl.F.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.J.impl.F(%self.param: %C, %u.param: %C) -> %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %C = name_ref self, %self @@ -683,13 +652,6 @@ fn F() { // CHECK:STDOUT: %J.F: %J.F.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1.572: %J.assoc_type = assoc_entity element1, @J.%J.F.decl [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = 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: %.Self.e7c: %J.type = bind_symbolic_name .Self [symbolic_self] @@ -741,14 +703,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .Negate = %Core.Negate // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.Negate: type = import_ref Core//prelude/parts/int_literal, Negate, loaded [concrete = constants.%Negate.type] // CHECK:STDOUT: %Core.import_ref.5f5 = import_ref Core//prelude/parts/int, loc42_43, unloaded @@ -834,22 +794,6 @@ fn F() { // CHECK:STDOUT: assoc_const U:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.J.impl: %D.ref as %.loc10_13 { // CHECK:STDOUT: %D.as.J.impl.F.decl: %D.as.J.impl.F.type = fn_decl @D.as.J.impl.F [concrete = constants.%D.as.J.impl.F] { // CHECK:STDOUT: %u.patt: %pattern_type.7ce = binding_pattern u [concrete] @@ -875,10 +819,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -895,8 +835,6 @@ fn F() { // CHECK:STDOUT: fn(%u.param: @J.F.%impl.elem0.loc5_11.1 (%impl.elem0.312)) -> @J.F.%impl.elem0.loc5_11.1 (%impl.elem0.312); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @D.as.J.impl.F(%u.param: %i32) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %u.ref: %i32 = name_ref u, %u @@ -983,13 +921,6 @@ fn F() { // CHECK:STDOUT: %E.as.J.impl.G.type: type = fn_type @E.as.J.impl.G [concrete] // CHECK:STDOUT: %E.as.J.impl.G: %E.as.J.impl.G.type = struct_value () [concrete] // CHECK:STDOUT: %J.facet: %J.type = facet_value %E, (%J.impl_witness) [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @E.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.742: type = ptr_type %E [concrete] -// CHECK:STDOUT: %pattern_type.88c: type = pattern_type %ptr.742 [concrete] -// CHECK:STDOUT: %E.as.Destroy.impl.Op.type: type = fn_type @E.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %E.as.Destroy.impl.Op: %E.as.Destroy.impl.Op.type = 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: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -1065,14 +996,12 @@ fn F() { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Negate = %Core.Negate // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Negate: type = import_ref Core//prelude/parts/int_literal, Negate, loaded [concrete = constants.%Negate.type] // CHECK:STDOUT: %Core.import_ref.5f5 = import_ref Core//prelude/parts/int, loc42_43, unloaded // CHECK:STDOUT: %Core.import_ref.b08: @Int.as.Negate.impl.%Int.as.Negate.impl.Op.type (%Int.as.Negate.impl.Op.type.d16) = import_ref Core//prelude/parts/int, loc43_31, loaded [symbolic = @Int.as.Negate.impl.%Int.as.Negate.impl.Op (constants.%Int.as.Negate.impl.Op.335)] @@ -1266,22 +1195,6 @@ fn F() { // CHECK:STDOUT: witness = @E.%J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @E.as.Destroy.impl: @E.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %E.as.Destroy.impl.Op.decl: %E.as.Destroy.impl.Op.type = fn_decl @E.as.Destroy.impl.Op [concrete = constants.%E.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.88c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.88c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.742 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] -// CHECK:STDOUT: %self: %ptr.742 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %E.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @E.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @E { // CHECK:STDOUT: impl_decl @E.as.J.impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] @@ -1302,10 +1215,6 @@ fn F() { // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%impl_witness_assoc_constant, @E.as.J.impl.%E.as.J.impl.F.decl, @E.as.J.impl.%E.as.J.impl.G.decl), @E.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] -// CHECK:STDOUT: impl_decl @E.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@E.as.Destroy.impl.%E.as.Destroy.impl.Op.decl), @E.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1359,8 +1268,6 @@ fn F() { // CHECK:STDOUT: return %Int.as.Negate.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @E.as.Destroy.impl.Op(%self.param: %ptr.742) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @CallBoth(%e.param: %E) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -2402,13 +2309,6 @@ fn F() { // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %E.as.J.impl.F.type.5c59b5.2: type = fn_type @E.as.J.impl.F.loc24_21.2 [concrete] // CHECK:STDOUT: %E.as.J.impl.F.888aff.2: %E.as.J.impl.F.type.5c59b5.2 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @E.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.742: type = ptr_type %E [concrete] -// CHECK:STDOUT: %pattern_type.88c: type = pattern_type %ptr.742 [concrete] -// CHECK:STDOUT: %E.as.Destroy.impl.Op.type: type = fn_type @E.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %E.as.Destroy.impl.Op: %E.as.Destroy.impl.Op.type = 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: } @@ -2417,13 +2317,11 @@ fn F() { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2508,22 +2406,6 @@ fn F() { // CHECK:STDOUT: witness = @E.%J.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @E.as.Destroy.impl: @E.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %E.as.Destroy.impl.Op.decl: %E.as.Destroy.impl.Op.type = fn_decl @E.as.Destroy.impl.Op [concrete = constants.%E.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.88c = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.88c = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc8: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.742 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] -// CHECK:STDOUT: %self: %ptr.742 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %E.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @E.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @E { // CHECK:STDOUT: impl_decl @E.as.J.impl [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] @@ -2544,10 +2426,6 @@ fn F() { // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (%impl_witness_assoc_constant, @E.as.J.impl.%E.as.J.impl.F.decl.loc24_21.2), @E.as.J.impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E] -// CHECK:STDOUT: impl_decl @E.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@E.as.Destroy.impl.%E.as.Destroy.impl.Op.decl), @E.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -2582,8 +2460,6 @@ fn F() { // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @E.as.Destroy.impl.Op(%self.param: %ptr.742) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%Self.bf6) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @J.F(constants.%Self.bf6) { @@ -2606,11 +2482,11 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %J2.type: type = facet_type <@J2> [concrete] -// CHECK:STDOUT: %Self.a70: %J2.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %J2.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %J2.assoc_type: type = assoc_entity_type @J2 [concrete] // CHECK:STDOUT: %assoc0: %J2.assoc_type = assoc_entity element0, @J2.%U2 [concrete] -// CHECK:STDOUT: %Self.as_type.dda: type = facet_access_type %Self.a70 [symbolic] -// CHECK:STDOUT: %pattern_type.a0e: type = pattern_type %Self.as_type.dda [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.a0e: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %J2.F.type: type = fn_type @J2.F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %J2.F: %J2.F.type = struct_value () [concrete] @@ -2631,13 +2507,6 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type.as.J2.impl.F.d5ee13.2: %empty_tuple.type.as.J2.impl.F.type.5e6249.2 = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %C2: type = class_type @C2 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C2.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.0d6: type = ptr_type %C2 [concrete] -// CHECK:STDOUT: %pattern_type.191: type = pattern_type %ptr.0d6 [concrete] -// CHECK:STDOUT: %C2.as.Destroy.impl.Op.type: type = fn_type @C2.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C2.as.Destroy.impl.Op: %C2.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %J2_where.type.29c: type = facet_type <@J2 where %impl.elem0 = %C2> [concrete] // CHECK:STDOUT: %J2.impl_witness.f8b: = impl_witness file.%J2.impl_witness_table.loc38 [concrete] @@ -2652,11 +2521,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2709,7 +2576,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J2 { -// CHECK:STDOUT: %Self: %J2.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.a70] +// CHECK:STDOUT: %Self: %J2.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %U2: type = assoc_const_decl @U2 [concrete] { // CHECK:STDOUT: %assoc0: %J2.assoc_type = assoc_entity element0, @J2.%U2 [concrete = constants.%assoc0] // CHECK:STDOUT: } @@ -2721,16 +2588,16 @@ fn F() { // CHECK:STDOUT: %return.patt: = return_slot_pattern [concrete] // CHECK:STDOUT: %return.param_patt: = out_param_pattern %return.patt, call_param2 [concrete] // CHECK:STDOUT: } { -// CHECK:STDOUT: %Self.ref.loc19_35: %J2.type = name_ref Self, @J2.%Self [symbolic = %Self (constants.%Self.a70)] -// CHECK:STDOUT: %self.param: @J2.F.%Self.as_type.loc19_14.1 (%Self.as_type.dda) = value_param call_param0 -// CHECK:STDOUT: %.loc19_14.1: type = splice_block %.loc19_14.2 [symbolic = %Self.as_type.loc19_14.1 (constants.%Self.as_type.dda)] { -// CHECK:STDOUT: %Self.ref.loc19_14: %J2.type = name_ref Self, @J2.%Self [symbolic = %Self (constants.%Self.a70)] -// CHECK:STDOUT: %Self.as_type.loc19_14.2: type = facet_access_type %Self.ref.loc19_14 [symbolic = %Self.as_type.loc19_14.1 (constants.%Self.as_type.dda)] -// CHECK:STDOUT: %.loc19_14.2: type = converted %Self.ref.loc19_14, %Self.as_type.loc19_14.2 [symbolic = %Self.as_type.loc19_14.1 (constants.%Self.as_type.dda)] +// CHECK:STDOUT: %Self.ref.loc19_35: %J2.type = name_ref Self, @J2.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %self.param: @J2.F.%Self.as_type.loc19_14.1 (%Self.as_type) = value_param call_param0 +// CHECK:STDOUT: %.loc19_14.1: type = splice_block %.loc19_14.2 [symbolic = %Self.as_type.loc19_14.1 (constants.%Self.as_type)] { +// CHECK:STDOUT: %Self.ref.loc19_14: %J2.type = name_ref Self, @J2.%Self [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc19_14.2: type = facet_access_type %Self.ref.loc19_14 [symbolic = %Self.as_type.loc19_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %.loc19_14.2: type = converted %Self.ref.loc19_14, %Self.as_type.loc19_14.2 [symbolic = %Self.as_type.loc19_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: } -// CHECK:STDOUT: %self: @J2.F.%Self.as_type.loc19_14.1 (%Self.as_type.dda) = bind_name self, %self.param +// CHECK:STDOUT: %self: @J2.F.%Self.as_type.loc19_14.1 (%Self.as_type) = bind_name self, %self.param // CHECK:STDOUT: %z.param: = value_param call_param1 -// CHECK:STDOUT: %Self.ref.loc19_23: %J2.type = name_ref Self, @J2.%Self [symbolic = %Self (constants.%Self.a70)] +// CHECK:STDOUT: %Self.ref.loc19_23: %J2.type = name_ref Self, @J2.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %z: = bind_name z, %z.param // CHECK:STDOUT: %return.param: ref = out_param call_param2 // CHECK:STDOUT: %return: ref = return_slot %return.param @@ -2790,22 +2657,6 @@ fn F() { // CHECK:STDOUT: witness = file.%J2.impl_witness.loc22 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C2.as.Destroy.impl: @C2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C2.as.Destroy.impl.Op.decl: %C2.as.Destroy.impl.Op.type = fn_decl @C2.as.Destroy.impl.Op [concrete = constants.%C2.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.191 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.191 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc33: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.0d6 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C2 [concrete = constants.%C2] -// CHECK:STDOUT: %self: %ptr.0d6 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C2.as.J2.impl: %C2.ref.loc38_6 as %.loc38_15 { // CHECK:STDOUT: %C2.as.J2.impl.F.decl.loc39_33.1: %C2.as.J2.impl.F.type.c649bf.1 = fn_decl @C2.as.J2.impl.F.loc39_33.1 [concrete = constants.%C2.as.J2.impl.F.27d057.1] { // CHECK:STDOUT: %self.patt: %pattern_type.838 = binding_pattern self [concrete] @@ -2849,10 +2700,6 @@ fn F() { // CHECK:STDOUT: %.loc35_10: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc35_11: type = converted %.loc35_10, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: adapt_decl %.loc35_11 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C2 [concrete = constants.%C2] -// CHECK:STDOUT: impl_decl @C2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C2.as.Destroy.impl.%C2.as.Destroy.impl.Op.decl), @C2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -2861,11 +2708,11 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @J2.F(@J2.%Self: %J2.type) { -// CHECK:STDOUT: %Self: %J2.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.a70)] -// CHECK:STDOUT: %Self.as_type.loc19_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc19_14.1 (constants.%Self.as_type.dda)] +// CHECK:STDOUT: %Self: %J2.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type.loc19_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc19_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc19_14.1 [symbolic = %pattern_type (constants.%pattern_type.a0e)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @J2.F.%Self.as_type.loc19_14.1 (%Self.as_type.dda), %z.param: ) -> ; +// CHECK:STDOUT: fn(%self.param: @J2.F.%Self.as_type.loc19_14.1 (%Self.as_type), %z.param: ) -> ; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @empty_tuple.type.as.J2.impl.F.loc30_33.1(%self.param: %empty_tuple.type, %z.param: %empty_struct_type) -> %empty_struct_type { @@ -2885,8 +2732,6 @@ fn F() { // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C2.as.Destroy.impl.Op(%self.param: %ptr.0d6) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C2.as.J2.impl.F.loc39_33.1(%self.param: %C2, %z.param: %C2) -> %C2 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %C2 = name_ref self, %self @@ -2909,11 +2754,11 @@ fn F() { // CHECK:STDOUT: return to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @U2(constants.%Self.a70) {} +// CHECK:STDOUT: specific @U2(constants.%Self) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @J2.F(constants.%Self.a70) { -// CHECK:STDOUT: %Self => constants.%Self.a70 -// CHECK:STDOUT: %Self.as_type.loc19_14.1 => constants.%Self.as_type.dda +// CHECK:STDOUT: specific @J2.F(constants.%Self) { +// CHECK:STDOUT: %Self => constants.%Self +// CHECK:STDOUT: %Self.as_type.loc19_14.1 => constants.%Self.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a0e // CHECK:STDOUT: } // CHECK:STDOUT: @@ -3300,13 +3145,6 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T.8b3) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %M.type: type = facet_type <@M> [concrete] @@ -3350,12 +3188,10 @@ fn F() { // 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: 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.f97: %type.as.Copy.impl.Op.type = import_ref Core//prelude/parts/copy, loc40_31, loaded [concrete = constants.%type.as.Copy.impl.Op] // CHECK:STDOUT: %Copy.impl_witness_table.40f = impl_witness_table (%Core.import_ref.f97), @type.as.Copy.impl [concrete] @@ -3452,35 +3288,6 @@ fn F() { // CHECK:STDOUT: assoc_const Z:! %struct_type.b.86f; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc3_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc3_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc3_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc3_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T.8b3) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc3_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.M.impl.fc9: %C as %.loc10_17 { // CHECK:STDOUT: %C.as.M.impl.G.decl: %C.as.M.impl.G.type.d3b = fn_decl @C.as.M.impl.G.loc11 [concrete = constants.%C.as.M.impl.G.0d1] { // CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern [concrete] @@ -3517,10 +3324,6 @@ fn F() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T.8b3) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -3529,17 +3332,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc3_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @M.G(@M.%Self: %M.type) { // CHECK:STDOUT: fn() -> type; // CHECK:STDOUT: } @@ -3582,19 +3374,6 @@ fn F() { // CHECK:STDOUT: %T.loc3_9.1 => constants.%T.8b3 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T.8b3) { -// CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%Self.67e) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @M.G(constants.%Self.67e) {} @@ -3911,21 +3690,9 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.4c2: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %ptr.7d2: type = ptr_type %C.f2e [symbolic] -// CHECK:STDOUT: %pattern_type.1d2: type = pattern_type %ptr.7d2 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.1da: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.d87: %C.as.Destroy.impl.Op.type.1da = 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: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %.Self.de3: %Z.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.de3 [symbolic_self] // CHECK:STDOUT: %Z.lookup_impl_witness: = lookup_impl_witness %.Self.de3, @Z [symbolic_self] @@ -3942,12 +3709,13 @@ fn F() { // CHECK:STDOUT: %Z.facet: %Z.type = facet_value %D, (%Z.impl_witness.4bd) [concrete] // CHECK:STDOUT: %pattern_type.7f8: type = pattern_type %C.131 [concrete] // CHECK:STDOUT: %C.val: %C.131 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.297: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%D) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.5f9: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%D) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.6d7: %C.as.Destroy.impl.Op.type.5f9 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C.131, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.b3c: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.570: %AggregateT.as_type.as.Destroy.impl.Op.type.b3c = struct_value () [concrete] // CHECK:STDOUT: %ptr.aaa: type = ptr_type %C.131 [concrete] -// CHECK:STDOUT: %pattern_type.b56: type = pattern_type %ptr.aaa [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function %C.as.Destroy.impl.Op.6d7, @C.as.Destroy.impl.Op(%D) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.570, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -4019,51 +3787,6 @@ fn F() { // CHECK:STDOUT: assoc_const X:! type; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%T.loc6_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%T) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%T) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.1da)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.1da) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.d87)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.1da) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.d87)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.1d2) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6_19.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = value_param call_param0 -// CHECK:STDOUT: %.loc6_19.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.f2e)] { -// CHECK:STDOUT: %.loc6_19.3: type = specific_constant constants.%C.f2e, @C(constants.%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6_19.3 [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Z.impl(%T.loc9_14.1: type) { // CHECK:STDOUT: %T.loc9_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc9_14.2 (constants.%T)] // CHECK:STDOUT: %C.loc9_45.2: type = class_type @C, @C(%T.loc9_14.2) [symbolic = %C.loc9_45.2 (constants.%C.f2e)] @@ -4085,10 +3808,6 @@ fn F() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.f2e [symbolic = @C.as.Destroy.impl.%C (constants.%C.f2e)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%T) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.4c2)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -4098,10 +3817,6 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -4109,19 +3824,6 @@ fn F() { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%T.loc6_9.2: type) { -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.7d2)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.1d2)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.7d2)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -4145,11 +3847,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %.loc12_23.2: %C.131 = bind_value %.loc12_23.1 // CHECK:STDOUT: %a: %C.131 = bind_name a, %.loc12_23.2 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %.loc12_21.4, constants.%C.as.Destroy.impl.Op.6d7 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn: = specific_function constants.%C.as.Destroy.impl.Op.6d7, @C.as.Destroy.impl.Op(constants.%D) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %.loc12_21.4, %C.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C.131, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc12_21.5: %type_where = converted constants.%C.131, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc12_21.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.570 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.570, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %.loc12_21.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.aaa = addr_of %.loc12_21.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -4159,19 +3863,6 @@ fn F() { // CHECK:STDOUT: %T.loc6_9.1 => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.4c2 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%T) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %C => constants.%C.f2e -// CHECK:STDOUT: %ptr => constants.%ptr.7d2 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1d2 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%.Self.de3) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @T.as.Z.impl(constants.%T) { @@ -4200,20 +3891,3 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%Z.facet) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%D) { -// CHECK:STDOUT: %T => constants.%D -// CHECK:STDOUT: %C => constants.%C.131 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.297 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.5f9 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.6d7 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%D) { -// CHECK:STDOUT: %T => constants.%D -// CHECK:STDOUT: %C => constants.%C.131 -// CHECK:STDOUT: %ptr => constants.%ptr.aaa -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b56 -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/index/fail_name_not_found.carbon b/toolchain/check/testdata/index/fail_name_not_found.carbon index 3074cb254c42..e7b237c475c4 100644 --- a/toolchain/check/testdata/index/fail_name_not_found.carbon +++ b/toolchain/check/testdata/index/fail_name_not_found.carbon @@ -33,10 +33,12 @@ fn Main() { // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -70,16 +72,18 @@ fn Main() { // CHECK:STDOUT: %a.ref: = name_ref a, [concrete = ] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] // CHECK:STDOUT: assign %b.var, -// CHECK:STDOUT: %.loc20: type = splice_block %i32 [concrete = constants.%i32] { +// CHECK:STDOUT: %.loc20_10: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %b.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc20_3: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %b.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.235 = addr_of %b.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/as_type_of_type.carbon b/toolchain/check/testdata/interface/as_type_of_type.carbon index 71160339aaac..a7a2be702b9e 100644 --- a/toolchain/check/testdata/interface/as_type_of_type.carbon +++ b/toolchain/check/testdata/interface/as_type_of_type.carbon @@ -28,15 +28,6 @@ fn F(T:! Empty) { // CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete] // CHECK:STDOUT: %Self.e3a: %Empty.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %Empty.impl_witness: = impl_witness file.%Empty.impl_witness_table [concrete] @@ -45,18 +36,21 @@ fn F(T:! Empty) { // CHECK:STDOUT: %T: %Empty.type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.639: type = pattern_type %Empty.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %ptr.2b9: type = ptr_type %T.as_type [symbolic] // CHECK:STDOUT: %require_complete.1f4: = require_complete_type %ptr.2b9 [symbolic] // CHECK:STDOUT: %pattern_type.ae3: type = pattern_type %ptr.2b9 [symbolic] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %ptr.886: type = ptr_type %ptr.2b9 [symbolic] // CHECK:STDOUT: %require_complete.67e: = require_complete_type %ptr.886 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.85e: = lookup_impl_witness %ptr.2b9, @Destroy [symbolic] -// CHECK:STDOUT: %Destroy.facet.b61: %Destroy.type = facet_value %ptr.2b9, (%Destroy.lookup_impl_witness.85e) [symbolic] -// CHECK:STDOUT: %.2e5: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.b61 [symbolic] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.2b9, (%Destroy.lookup_impl_witness.85e) [symbolic] +// CHECK:STDOUT: %.2e5: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet [symbolic] // CHECK:STDOUT: %impl.elem0.ceb: %.2e5 = impl_witness_access %Destroy.lookup_impl_witness.85e, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.aea: = specific_impl_function %impl.elem0.ceb, @Destroy.Op(%Destroy.facet.b61) [symbolic] +// CHECK:STDOUT: %specific_impl_fn.aea: = specific_impl_function %impl.elem0.ceb, @Destroy.Op(%Destroy.facet) [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -103,32 +97,12 @@ fn F(T:! Empty) { // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.Empty.impl: %C.ref as %Empty.ref { // CHECK:STDOUT: !members: // CHECK:STDOUT: witness = file.%Empty.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -136,8 +110,6 @@ fn F(T:! Empty) { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc21_6.2: %Empty.type) { // CHECK:STDOUT: %T.loc21_6.1: %Empty.type = bind_symbolic_name T, 0 [symbolic = %T.loc21_6.1 (constants.%T)] // CHECK:STDOUT: @@ -147,7 +119,7 @@ fn F(T:! Empty) { // CHECK:STDOUT: %require_complete.loc22_11: = require_complete_type %ptr.loc22_11.2 [symbolic = %require_complete.loc22_11 (constants.%require_complete.1f4)] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc22_11.2 [symbolic = %pattern_type (constants.%pattern_type.ae3)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %ptr.loc22_11.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.85e)] -// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.loc22_11.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.b61)] +// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.loc22_11.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)] // CHECK:STDOUT: %.loc22_3.2: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc22_3.2 (constants.%.2e5)] // CHECK:STDOUT: %impl.elem0.loc22_3.2: @F.%.loc22_3.2 (%.2e5) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0.ceb)] // CHECK:STDOUT: %specific_impl_fn.loc22_3.2: = specific_impl_function %impl.elem0.loc22_3.2, @Destroy.Op(%Destroy.facet) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn.aea)] @@ -170,7 +142,7 @@ fn F(T:! Empty) { // CHECK:STDOUT: %x: ref @F.%ptr.loc22_11.2 (%ptr.2b9) = bind_name x, %x.var // CHECK:STDOUT: %impl.elem0.loc22_3.1: @F.%.loc22_3.2 (%.2e5) = impl_witness_access constants.%Destroy.lookup_impl_witness.85e, element0 [symbolic = %impl.elem0.loc22_3.2 (constants.%impl.elem0.ceb)] // CHECK:STDOUT: %bound_method.loc22_3.1: = bound_method %x.var, %impl.elem0.loc22_3.1 -// CHECK:STDOUT: %specific_impl_fn.loc22_3.1: = specific_impl_function %impl.elem0.loc22_3.1, @Destroy.Op(constants.%Destroy.facet.b61) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn.aea)] +// CHECK:STDOUT: %specific_impl_fn.loc22_3.1: = specific_impl_function %impl.elem0.loc22_3.1, @Destroy.Op(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_3.2 (constants.%specific_impl_fn.aea)] // CHECK:STDOUT: %bound_method.loc22_3.2: = bound_method %x.var, %specific_impl_fn.loc22_3.1 // CHECK:STDOUT: %addr: @F.%ptr.loc22_3 (%ptr.886) = addr_of %x.var // CHECK:STDOUT: %.loc22_3.1: init %empty_tuple.type = call %bound_method.loc22_3.2(%addr) diff --git a/toolchain/check/testdata/interface/compound_member_access.carbon b/toolchain/check/testdata/interface/compound_member_access.carbon index eda28f8b25aa..0056de60ab90 100644 --- a/toolchain/check/testdata/interface/compound_member_access.carbon +++ b/toolchain/check/testdata/interface/compound_member_access.carbon @@ -1195,15 +1195,8 @@ fn Works() { // CHECK:STDOUT: %A.assoc_type: type = assoc_entity_type @A [concrete] // CHECK:STDOUT: %assoc0.d52: %A.assoc_type = assoc_entity element0, @A.%A.G.decl [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %A.impl_witness: = impl_witness file.%A.impl_witness_table [concrete] // CHECK:STDOUT: %C.as.A.impl.G.type: type = fn_type @C.as.A.impl.G [concrete] // CHECK:STDOUT: %C.as.A.impl.G: %C.as.A.impl.G.type = struct_value () [concrete] @@ -1223,21 +1216,28 @@ fn Works() { // CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound: = bound_method %A.type, %type.as.BitAndWith.impl.Op [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .BitAndWith = %Core.BitAndWith // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// 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.BitAndWith: %BitAndWith.type.f2e = import_ref Core//prelude/parts/as, BitAndWith, loaded [concrete = constants.%BitAndWith.generic] // CHECK:STDOUT: %Core.import_ref.636: %type.as.BitAndWith.impl.Op.type = import_ref Core//prelude/parts/as, loc25_42, loaded [concrete = constants.%type.as.BitAndWith.impl.Op] // CHECK:STDOUT: %BitAndWith.impl_witness_table = impl_witness_table (%Core.import_ref.636), @type.as.BitAndWith.impl [concrete] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1270,22 +1270,6 @@ fn Works() { // CHECK:STDOUT: witness = (%A.G.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.A.impl: %C.ref as %A.ref { // CHECK:STDOUT: %C.as.A.impl.G.decl: %C.as.A.impl.G.type = fn_decl @C.as.A.impl.G [concrete = constants.%C.as.A.impl.G] {} {} // CHECK:STDOUT: @@ -1295,11 +1279,7 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -1310,8 +1290,6 @@ fn Works() { // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.A.impl.G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return @@ -1328,8 +1306,8 @@ fn Works() { // CHECK:STDOUT: %A.ref.loc22_15: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %A.ref.loc22_19: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %impl.elem0.loc22: %.fa7 = impl_witness_access constants.%BitAndWith.impl_witness, element0 [concrete = constants.%type.as.BitAndWith.impl.Op] -// CHECK:STDOUT: %bound_method.loc22: = bound_method %A.ref.loc22_15, %impl.elem0.loc22 [concrete = constants.%type.as.BitAndWith.impl.Op.bound] -// CHECK:STDOUT: %type.as.BitAndWith.impl.Op.call.loc22: init type = call %bound_method.loc22(%A.ref.loc22_15, %A.ref.loc22_19) [concrete = constants.%A.type] +// CHECK:STDOUT: %bound_method.loc22_17: = bound_method %A.ref.loc22_15, %impl.elem0.loc22 [concrete = constants.%type.as.BitAndWith.impl.Op.bound] +// CHECK:STDOUT: %type.as.BitAndWith.impl.Op.call.loc22: init type = call %bound_method.loc22_17(%A.ref.loc22_15, %A.ref.loc22_19) [concrete = constants.%A.type] // CHECK:STDOUT: %G.ref.loc22: %A.assoc_type = name_ref G, @A.%assoc0 [concrete = constants.%assoc0.d52] // CHECK:STDOUT: %.loc22_12: %A.type = converted %.loc22_7, [concrete = ] // CHECK:STDOUT: %.loc30_6.1: %empty_struct_type = struct_literal () @@ -1367,8 +1345,8 @@ fn Works() { // CHECK:STDOUT: %A.ref.loc38_24: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %A.ref.loc38_28: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %impl.elem0.loc38: %.fa7 = impl_witness_access constants.%BitAndWith.impl_witness, element0 [concrete = constants.%type.as.BitAndWith.impl.Op] -// CHECK:STDOUT: %bound_method.loc38: = bound_method %A.ref.loc38_24, %impl.elem0.loc38 [concrete = constants.%type.as.BitAndWith.impl.Op.bound] -// CHECK:STDOUT: %type.as.BitAndWith.impl.Op.call.loc38: init type = call %bound_method.loc38(%A.ref.loc38_24, %A.ref.loc38_28) [concrete = constants.%A.type] +// CHECK:STDOUT: %bound_method.loc38_26: = bound_method %A.ref.loc38_24, %impl.elem0.loc38 [concrete = constants.%type.as.BitAndWith.impl.Op.bound] +// CHECK:STDOUT: %type.as.BitAndWith.impl.Op.call.loc38: init type = call %bound_method.loc38_26(%A.ref.loc38_24, %A.ref.loc38_28) [concrete = constants.%A.type] // CHECK:STDOUT: %.loc38_29.1: type = value_of_initializer %type.as.BitAndWith.impl.Op.call.loc38 [concrete = constants.%A.type] // CHECK:STDOUT: %.loc38_29.2: type = converted %type.as.BitAndWith.impl.Op.call.loc38, %.loc38_29.1 [concrete = constants.%A.type] // CHECK:STDOUT: %A.facet.loc38: %A.type = facet_value constants.%C, (constants.%A.impl_witness) [concrete = constants.%A.facet] @@ -1378,15 +1356,27 @@ fn Works() { // CHECK:STDOUT: %A.ref.loc38_34: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %G.ref.loc38: %A.assoc_type = name_ref G, @A.%assoc0 [concrete = constants.%assoc0.d52] // CHECK:STDOUT: %.loc38_32: %A.type = converted %.loc38_8, [concrete = ] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc38: = bound_method %.loc38_6.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc38: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc38_6.5: %type_where = converted constants.%C, %facet_value.loc38 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc38: = bound_method %.loc38_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc38_6: = bound_method %.loc38_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc38: %ptr.019 = addr_of %.loc38_6.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc38: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound.loc38(%addr.loc38) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc30: = bound_method %.loc30_6.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc38: init %empty_tuple.type = call %bound_method.loc38_6(%addr.loc38) +// CHECK:STDOUT: %facet_value.loc30: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc30_6.5: %type_where = converted constants.%C, %facet_value.loc30 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc30: = bound_method %.loc30_6.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc30_6: = bound_method %.loc30_6.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc30: %ptr.019 = addr_of %.loc30_6.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound.loc30(%addr.loc30) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc22: = bound_method %.loc22_5.4, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %bound_method.loc30_6(%addr.loc30) +// CHECK:STDOUT: %facet_value.loc22: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc22_5.5: %type_where = converted constants.%C, %facet_value.loc22 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc22: = bound_method %.loc22_5.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc22_5: = bound_method %.loc22_5.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc22: %ptr.019 = addr_of %.loc22_5.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound.loc22(%addr.loc22) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22_5(%addr.loc22) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1405,13 +1395,6 @@ fn Works() { // CHECK:STDOUT: %A.assoc_type: type = assoc_entity_type @A [concrete] // CHECK:STDOUT: %assoc0.d52: %A.assoc_type = assoc_entity element0, @A.%A.G.decl [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %A.impl_witness: = impl_witness file.%A.impl_witness_table [concrete] @@ -1435,12 +1418,10 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .BitAndWith = %Core.BitAndWith // 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.BitAndWith: %BitAndWith.type.f2e = import_ref Core//prelude/parts/as, BitAndWith, loaded [concrete = constants.%BitAndWith.generic] // CHECK:STDOUT: %Core.import_ref.636: %type.as.BitAndWith.impl.Op.type = import_ref Core//prelude/parts/as, loc25_42, loaded [concrete = constants.%type.as.BitAndWith.impl.Op] // CHECK:STDOUT: %BitAndWith.impl_witness_table = impl_witness_table (%Core.import_ref.636), @type.as.BitAndWith.impl [concrete] @@ -1476,22 +1457,6 @@ fn Works() { // CHECK:STDOUT: witness = (%A.G.decl) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.A.impl: %C.ref as %A.ref { // CHECK:STDOUT: %C.as.A.impl.G.decl: %C.as.A.impl.G.type = fn_decl @C.as.A.impl.G [concrete = constants.%C.as.A.impl.G] {} {} // CHECK:STDOUT: @@ -1501,10 +1466,6 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1516,8 +1477,6 @@ fn Works() { // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.A.impl.G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return diff --git a/toolchain/check/testdata/interface/default_fn.carbon b/toolchain/check/testdata/interface/default_fn.carbon index 4f9327e84749..d021a513a95d 100644 --- a/toolchain/check/testdata/interface/default_fn.carbon +++ b/toolchain/check/testdata/interface/default_fn.carbon @@ -45,18 +45,18 @@ class C { // 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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %require_complete.3c3: = require_complete_type %Self.as_type.800 [symbolic] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.fa9: type = fn_type_with_self_type %I.F.type, %I.facet [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -116,22 +116,6 @@ class C { // CHECK:STDOUT: witness = @C.%I.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} { @@ -140,11 +124,7 @@ class C { // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (@C.as.I.impl.%C.as.I.impl.F.decl), @C.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -170,20 +150,24 @@ class C { // CHECK:STDOUT: %c.var: ref %C = var %c.var_patt // CHECK:STDOUT: %.loc20_19.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc20_19.2: init %C = class_init (), %c.var [concrete = constants.%C.val] -// CHECK:STDOUT: %.loc20_7: init %C = converted %.loc20_19.1, %.loc20_19.2 [concrete = constants.%C.val] -// CHECK:STDOUT: assign %c.var, %.loc20_7 +// CHECK:STDOUT: %.loc20_7.1: init %C = converted %.loc20_19.1, %.loc20_19.2 [concrete = constants.%C.val] +// CHECK:STDOUT: assign %c.var, %.loc20_7.1 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: %c.ref: ref %C = name_ref c, %c // CHECK:STDOUT: %I.ref: type = name_ref I, @C.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: %F.ref: %I.assoc_type = name_ref F, @I.%assoc0 [concrete = constants.%assoc0.a33] // CHECK:STDOUT: %impl.elem0: %.fa9 = impl_witness_access constants.%I.impl_witness, element0 [concrete = constants.%C.as.I.impl.F] -// CHECK:STDOUT: %bound_method: = bound_method %c.ref, %impl.elem0 +// CHECK:STDOUT: %bound_method.loc21: = bound_method %c.ref, %impl.elem0 // CHECK:STDOUT: %.loc21: %C = bind_value %c.ref -// CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %bound_method(%.loc21) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %bound_method.loc21(%.loc21) +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc20_7.2: %type_where = converted constants.%C, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %c.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc20: = bound_method %c.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.019 = addr_of %c.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc20(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -193,8 +177,6 @@ class C { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @I.F(constants.%Self.d21) { // CHECK:STDOUT: %Self => constants.%Self.d21 // CHECK:STDOUT: %Self.as_type.loc18_16.1 => constants.%Self.as_type.800 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 9a03dde17edd..5be9558f3021 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 @@ -219,13 +219,6 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: %pattern_type.ead: type = pattern_type %ptr.b51 [symbolic] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F, @C(%Self.46e) [symbolic] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%Self.46e) [symbolic] -// CHECK:STDOUT: %ptr.c6c: type = ptr_type %C [symbolic] -// CHECK:STDOUT: %pattern_type.d5e: type = pattern_type %ptr.c6c [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Self.46e) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %require_complete.301: = require_complete_type %ptr.b51 [symbolic] @@ -241,12 +234,10 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; } // 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: 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: } // CHECK:STDOUT: @@ -297,35 +288,6 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@Interface.%Self: %Interface.type) { -// CHECK:STDOUT: %Self: %Interface.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.46e)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%Self) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%Self) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d5e) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d5e) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc13_11.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.c6c) = value_param call_param0 -// CHECK:STDOUT: %.loc13_11.2: type = splice_block %Self.ref [symbolic = %C (constants.%C)] { -// CHECK:STDOUT: %.loc13_11.3: type = specific_constant constants.%C, @C(constants.%Self.46e) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc13_11.3 [symbolic = %C (constants.%C)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.c6c) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(@Interface.%Self: %Interface.type) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Self: %Interface.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.46e)] @@ -361,10 +323,6 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: %return.param.loc14: ref @C.F.%ptr.loc14_36.1 (%ptr.b51) = out_param call_param2 // CHECK:STDOUT: %return.loc14: ref @C.F.%ptr.loc14_36.1 (%ptr.b51) = return_slot %return.param.loc14 // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [symbolic = @C.as.Destroy.impl.%C (constants.%C)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%Self.46e) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -403,17 +361,6 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@Interface.%Self: %Interface.type) { -// CHECK:STDOUT: %Self: %Interface.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.46e)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.c6c)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d5e)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.c6c)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%Self.46e) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Self => constants.%Self.46e @@ -430,16 +377,3 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: %pattern_type.loc14_32 => constants.%pattern_type.ead // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%Self.46e) { -// CHECK:STDOUT: %Self => constants.%Self.46e -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%Self.46e) { -// CHECK:STDOUT: %Self => constants.%Self.46e -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %ptr => constants.%ptr.c6c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d5e -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/generic_method.carbon b/toolchain/check/testdata/interface/generic_method.carbon index c258cbd1380b..94d0aba32b95 100644 --- a/toolchain/check/testdata/interface/generic_method.carbon +++ b/toolchain/check/testdata/interface/generic_method.carbon @@ -107,28 +107,10 @@ fn CallIndirect() { // CHECK:STDOUT: %A.assoc_type.ed3: type = assoc_entity_type @A, @A(%T.8b3) [symbolic] // CHECK:STDOUT: %assoc0.fcb: %A.assoc_type.ed3 = assoc_entity element0, @A.%A.F.decl [symbolic] // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7d5: = impl_witness @X.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = 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: %Y: type = class_type @Y [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.131: = impl_witness @Y.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.455: type = ptr_type %Y [concrete] -// CHECK:STDOUT: %pattern_type.0ae: type = pattern_type %ptr.455 [concrete] -// CHECK:STDOUT: %Y.as.Destroy.impl.Op.type: type = fn_type @Y.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Y.as.Destroy.impl.Op: %Y.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Z: type = class_type @Z [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7e3: = impl_witness @Z.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.fb6: type = ptr_type %Z [concrete] -// CHECK:STDOUT: %pattern_type.f76: type = pattern_type %ptr.fb6 [concrete] -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.type: type = fn_type @Z.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Z.as.Destroy.impl.Op: %Z.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %A.type.0a4: type = facet_type <@A, @A(%X)> [concrete] // CHECK:STDOUT: %Self.08e: %A.type.0a4 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %A.F.type.13d: type = fn_type @A.F, @A(%X) [concrete] @@ -164,9 +146,13 @@ fn CallIndirect() { // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %Z [concrete] // CHECK:STDOUT: %.d35: type = fn_type_with_self_type %A.F.type.13d, %A.facet [concrete] +// CHECK:STDOUT: %ptr.fb6: type = ptr_type %Z [concrete] +// CHECK:STDOUT: %pattern_type.f76: type = pattern_type %ptr.fb6 [concrete] // CHECK:STDOUT: %tuple.type.092: type = tuple_type (%X, %Y, %ptr.fb6) [concrete] // CHECK:STDOUT: %pattern_type.48d: type = pattern_type %tuple.type.092 [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: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %AggregateT: %type_where = bind_symbolic_name AggregateT, 0 [symbolic] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.190: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%AggregateT) [symbolic] @@ -179,7 +165,12 @@ fn CallIndirect() { // CHECK:STDOUT: %complete_type.aab: = complete_type_witness %ptr.5df [concrete] // CHECK:STDOUT: %Destroy.facet.d0e: %Destroy.type = facet_value %tuple.type.092, (%Destroy.impl_witness.89a) [concrete] // CHECK:STDOUT: %.f61: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.d0e [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.ed3, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.352) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.71f: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.ed3, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.352) [concrete] +// CHECK:STDOUT: %facet_value.4e3: %type_where = facet_value %Z, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.18a: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.4e3) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.dd5: %AggregateT.as_type.as.Destroy.impl.Op.type.18a = struct_value () [concrete] +// CHECK:STDOUT: %complete_type.d3e: = complete_type_witness %ptr.fb6 [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e7d: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.dd5, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.4e3) [concrete] // CHECK:STDOUT: %T.7bf: %A.type.0a4 = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.809: type = pattern_type %A.type.0a4 [concrete] // CHECK:STDOUT: %CallGeneric.type: type = fn_type @CallGeneric [concrete] @@ -204,7 +195,6 @@ fn CallIndirect() { // CHECK:STDOUT: %CallIndirect: %CallIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %CallGeneric.specific_fn: = specific_function %CallGeneric, @CallGeneric(%A.facet) [concrete] // CHECK:STDOUT: %complete_type.05d: = complete_type_witness %tuple.type.092 [concrete] -// CHECK:STDOUT: %complete_type.d3e: = complete_type_witness %ptr.fb6 [concrete] // CHECK:STDOUT: %tuple.type.953: type = tuple_type (%empty_struct_type, %empty_struct_type, %ptr.fb6) [concrete] // CHECK:STDOUT: %Copy.impl_witness.4b2: = impl_witness imports.%Copy.impl_witness_table.53c, @ptr.as.Copy.impl(%Z) [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.8a3: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%Z) [concrete] @@ -216,15 +206,15 @@ fn CallIndirect() { // 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.0e4: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.31ff4e.1) = import_ref Core//prelude/parts/copy, loc36_31, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.8a8b1a.1)] // CHECK:STDOUT: %Copy.impl_witness_table.53c = impl_witness_table (%Core.import_ref.0e4), @ptr.as.Copy.impl [concrete] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.import_ref.d51: @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op.type (%AggregateT.as_type.as.Destroy.impl.Op.type.190) = import_ref Core//prelude/parts/destroy, loc29_29, loaded [symbolic = @AggregateT.as_type.as.Destroy.impl.%AggregateT.as_type.as.Destroy.impl.Op (constants.%AggregateT.as_type.as.Destroy.impl.Op.8a0)] // CHECK:STDOUT: %Destroy.impl_witness_table.2d3 = impl_witness_table (%Core.import_ref.d51), @AggregateT.as_type.as.Destroy.impl [concrete] // CHECK:STDOUT: } @@ -325,54 +315,6 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @X.as.Destroy.impl: @X.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %X.as.Destroy.impl.Op.decl: %X.as.Destroy.impl.Op.type = fn_decl @X.as.Destroy.impl.Op [concrete = constants.%X.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1c6 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1c6 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d17 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: %self: %ptr.d17 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %X.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @X.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Y.as.Destroy.impl: @Y.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Y.as.Destroy.impl.Op.decl: %Y.as.Destroy.impl.Op.type = fn_decl @Y.as.Destroy.impl.Op [concrete = constants.%Y.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.0ae = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.0ae = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.455 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Y [concrete = constants.%Y] -// CHECK:STDOUT: %self: %ptr.455 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Y.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Y.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Z.as.Destroy.impl: @Z.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.decl: %Z.as.Destroy.impl.Op.type = fn_decl @Z.as.Destroy.impl.Op [concrete = constants.%Z.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f76 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f76 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.fb6 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Z [concrete = constants.%Z] -// CHECK:STDOUT: %self: %ptr.fb6 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Z.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Z.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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] @@ -407,10 +349,6 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @X { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: impl_decl @X.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@X.as.Destroy.impl.%X.as.Destroy.impl.Op.decl), @X.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.7d5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -419,10 +357,6 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Y { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Y [concrete = constants.%Y] -// CHECK:STDOUT: impl_decl @Y.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Y.as.Destroy.impl.%Y.as.Destroy.impl.Op.decl), @Y.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.131] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -431,10 +365,6 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Z { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Z [concrete = constants.%Z] -// CHECK:STDOUT: impl_decl @Z.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Z.as.Destroy.impl.%Z.as.Destroy.impl.Op.decl), @Z.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.7e3] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -457,12 +387,6 @@ fn CallIndirect() { // CHECK:STDOUT: fn(%u.param: @A.F.%ptr.loc6_22.1 (%ptr.204)) -> @A.F.%tuple.type.loc6_40.2 (%tuple.type.cb0); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @X.as.Destroy.impl.Op(%self.param: %ptr.d17) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Y.as.Destroy.impl.Op(%self.param: %ptr.455) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Z.as.Destroy.impl.Op(%self.param: %ptr.fb6) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @Y.as.A.impl.F(%U.loc16_8.2: type) { // CHECK:STDOUT: %U.loc16_8.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc16_8.1 (constants.%U.8b3)] // CHECK:STDOUT: %ptr.loc16_22.1: type = ptr_type %U.loc16_8.1 [symbolic = %ptr.loc16_22.1 (constants.%ptr.79f131.1)] @@ -532,16 +456,20 @@ fn CallIndirect() { // CHECK:STDOUT: %.loc23_22.1: ref %tuple.type.092 = temporary_storage // CHECK:STDOUT: %Y.as.A.impl.F.call: init %tuple.type.092 = call %specific_fn(%addr.loc23_20) to %.loc23_22.1 // CHECK:STDOUT: %.loc23_22.2: ref %tuple.type.092 = temporary %.loc23_22.1, %Y.as.A.impl.F.call -// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.092, () [concrete = constants.%facet_value.352] -// CHECK:STDOUT: %.loc23_22.3: %type_where = converted constants.%tuple.type.092, %facet_value [concrete = constants.%facet_value.352] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc23_22.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.ed3 -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.ed3, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.352) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %.loc23_22.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value.loc23: %type_where = facet_value constants.%tuple.type.092, () [concrete = constants.%facet_value.352] +// CHECK:STDOUT: %.loc23_22.3: %type_where = converted constants.%tuple.type.092, %facet_value.loc23 [concrete = constants.%facet_value.352] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc23: = bound_method %.loc23_22.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.ed3 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.ed3, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.352) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.71f] +// CHECK:STDOUT: %bound_method.loc23: = bound_method %.loc23_22.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc23_22: %ptr.5df = addr_of %.loc23_22.2 -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr.loc23_22) -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.bound: = bound_method %u.var, constants.%Z.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc23: init %empty_tuple.type = call %bound_method.loc23(%addr.loc23_22) +// CHECK:STDOUT: %facet_value.loc22: %type_where = facet_value constants.%Z, () [concrete = constants.%facet_value.4e3] +// CHECK:STDOUT: %.loc22: %type_where = converted constants.%Z, %facet_value.loc22 [concrete = constants.%facet_value.4e3] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc22: = bound_method %u.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.dd5 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.dd5, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e7d] +// CHECK:STDOUT: %bound_method.loc22: = bound_method %u.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc22: %ptr.fb6 = addr_of %u.var -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Z.as.Destroy.impl.Op.bound(%addr.loc22) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -595,9 +523,13 @@ fn CallIndirect() { // CHECK:STDOUT: %bound_method.loc28_12.2: = bound_method %.loc28_12.3, %specific_impl_fn.loc28_12.1 // CHECK:STDOUT: %addr.loc28_12: @CallGeneric.%ptr (%ptr.fd2) = addr_of %.loc28_12.3 // CHECK:STDOUT: %.loc28_12.5: init %empty_tuple.type = call %bound_method.loc28_12.2(%addr.loc28_12) -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.bound: = bound_method %u.var, constants.%Z.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc27: %type_where = facet_value constants.%Z, () [concrete = constants.%facet_value.4e3] +// CHECK:STDOUT: %.loc27: %type_where = converted constants.%Z, %facet_value.loc27 [concrete = constants.%facet_value.4e3] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %u.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.dd5 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.dd5, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e7d] +// CHECK:STDOUT: %bound_method.loc27: = bound_method %u.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc27: %ptr.fb6 = addr_of %u.var -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Z.as.Destroy.impl.Op.bound(%addr.loc27) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc27(%addr.loc27) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -714,7 +646,7 @@ fn CallIndirect() { // CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.d0e // CHECK:STDOUT: %.loc28_12.6 => constants.%.f61 // CHECK:STDOUT: %impl.elem0.loc28_12.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.ed3 -// CHECK:STDOUT: %specific_impl_fn.loc28_12.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %specific_impl_fn.loc28_12.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.71f // CHECK:STDOUT: %ptr => constants.%ptr.5df // CHECK:STDOUT: %require_complete.loc28_12.2 => constants.%complete_type.aab // CHECK:STDOUT: } @@ -755,34 +687,11 @@ fn CallIndirect() { // CHECK:STDOUT: %A.assoc_type.ed3: type = assoc_entity_type @A, @A(%T.8b3) [symbolic] // CHECK:STDOUT: %assoc0.fcb: %A.assoc_type.ed3 = assoc_entity element0, @A.%A.F.decl [symbolic] // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7d5: = impl_witness @X.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = 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: %Y1: type = class_type @Y1 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.021: = impl_witness @Y1.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.723: type = ptr_type %Y1 [concrete] -// CHECK:STDOUT: %pattern_type.273: type = pattern_type %ptr.723 [concrete] -// CHECK:STDOUT: %Y1.as.Destroy.impl.Op.type: type = fn_type @Y1.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Y1.as.Destroy.impl.Op: %Y1.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Y2: type = class_type @Y2 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.1dd: = impl_witness @Y2.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.23d: type = ptr_type %Y2 [concrete] -// CHECK:STDOUT: %pattern_type.484: type = pattern_type %ptr.23d [concrete] -// CHECK:STDOUT: %Y2.as.Destroy.impl.Op.type: type = fn_type @Y2.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Y2.as.Destroy.impl.Op: %Y2.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Z: type = class_type @Z [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7e3: = impl_witness @Z.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.fb6: type = ptr_type %Z [concrete] -// CHECK:STDOUT: %pattern_type.f76: type = pattern_type %ptr.fb6 [concrete] -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.type: type = fn_type @Z.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Z.as.Destroy.impl.Op: %Z.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %V1: type = bind_symbolic_name V1, 0 [symbolic] // CHECK:STDOUT: %V2: type = bind_symbolic_name V2, 1 [symbolic] // CHECK:STDOUT: %W: type = bind_symbolic_name W, 2 [symbolic] @@ -828,6 +737,8 @@ fn CallIndirect() { // CHECK:STDOUT: %pattern_type.0b2: type = pattern_type %tuple.type.415 [concrete] // CHECK:STDOUT: %tuple.type.as.A.impl.F.specific_fn.417: = specific_function %tuple.type.as.A.impl.F.e39, @tuple.type.as.A.impl.F(%Y1, %Y2, %X, %Z) [concrete] // CHECK:STDOUT: %Z.val: %Z = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %AggregateT: %type_where = bind_symbolic_name AggregateT, 0 [symbolic] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.190: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%AggregateT) [symbolic] @@ -840,7 +751,12 @@ fn CallIndirect() { // CHECK:STDOUT: %complete_type.e23: = complete_type_witness %ptr.ad9 [concrete] // CHECK:STDOUT: %Destroy.facet.684: %Destroy.type = facet_value %tuple.type.415, (%Destroy.impl_witness.37a) [concrete] // CHECK:STDOUT: %.27f: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.684 [concrete] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.f1a, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.71a) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.578: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.f1a, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.71a) [concrete] +// CHECK:STDOUT: %facet_value.4e3: %type_where = facet_value %Z, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.18a: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.4e3) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.dd5: %AggregateT.as_type.as.Destroy.impl.Op.type.18a = struct_value () [concrete] +// CHECK:STDOUT: %ptr.fb6: type = ptr_type %Z [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e7d: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.dd5, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.4e3) [concrete] // CHECK:STDOUT: %T.7bf: %A.type.0a4 = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.809: type = pattern_type %A.type.0a4 [concrete] // CHECK:STDOUT: %CallGeneric.type: type = fn_type @CallGeneric [concrete] @@ -986,70 +902,6 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @X.as.Destroy.impl: @X.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %X.as.Destroy.impl.Op.decl: %X.as.Destroy.impl.Op.type = fn_decl @X.as.Destroy.impl.Op [concrete = constants.%X.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1c6 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1c6 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d17 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: %self: %ptr.d17 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %X.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @X.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Y1.as.Destroy.impl: @Y1.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Y1.as.Destroy.impl.Op.decl: %Y1.as.Destroy.impl.Op.type = fn_decl @Y1.as.Destroy.impl.Op [concrete = constants.%Y1.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.273 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.273 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc10: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.723 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Y1 [concrete = constants.%Y1] -// CHECK:STDOUT: %self: %ptr.723 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Y1.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Y1.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Y2.as.Destroy.impl: @Y2.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Y2.as.Destroy.impl.Op.decl: %Y2.as.Destroy.impl.Op.type = fn_decl @Y2.as.Destroy.impl.Op [concrete = constants.%Y2.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.484 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.484 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc11: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.23d = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Y2 [concrete = constants.%Y2] -// CHECK:STDOUT: %self: %ptr.23d = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Y2.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Y2.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @Z.as.Destroy.impl: @Z.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.decl: %Z.as.Destroy.impl.Op.type = fn_decl @Z.as.Destroy.impl.Op [concrete = constants.%Z.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.f76 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.f76 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc12: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.fb6 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Z [concrete = constants.%Z] -// CHECK:STDOUT: %self: %ptr.fb6 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Z.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Z.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic impl @tuple.type.as.A.impl(%V1.loc14_14.2: type, %V2.loc14_25.2: type, %W.loc14_36.2: type) { // CHECK:STDOUT: %V1.loc14_14.1: type = bind_symbolic_name V1, 0 [symbolic = %V1.loc14_14.1 (constants.%V1)] // CHECK:STDOUT: %V2.loc14_25.1: type = bind_symbolic_name V2, 1 [symbolic = %V2.loc14_25.1 (constants.%V2)] @@ -1098,10 +950,6 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @X { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: impl_decl @X.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@X.as.Destroy.impl.%X.as.Destroy.impl.Op.decl), @X.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.7d5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1110,10 +958,6 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Y1 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Y1 [concrete = constants.%Y1] -// CHECK:STDOUT: impl_decl @Y1.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Y1.as.Destroy.impl.%Y1.as.Destroy.impl.Op.decl), @Y1.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.021] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1122,10 +966,6 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Y2 { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Y2 [concrete = constants.%Y2] -// CHECK:STDOUT: impl_decl @Y2.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Y2.as.Destroy.impl.%Y2.as.Destroy.impl.Op.decl), @Y2.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.1dd] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1134,10 +974,6 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Z { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Z [concrete = constants.%Z] -// CHECK:STDOUT: impl_decl @Z.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Z.as.Destroy.impl.%Z.as.Destroy.impl.Op.decl), @Z.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.7e3] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1159,14 +995,6 @@ fn CallIndirect() { // CHECK:STDOUT: fn(%u.param: @A.F.%U.loc6_8.1 (%U.2cb)) -> @A.F.%tuple.type.loc6_38.2 (%tuple.type.325); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @X.as.Destroy.impl.Op(%self.param: %ptr.d17) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Y1.as.Destroy.impl.Op(%self.param: %ptr.723) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Y2.as.Destroy.impl.Op(%self.param: %ptr.23d) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @Z.as.Destroy.impl.Op(%self.param: %ptr.fb6) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @tuple.type.as.A.impl.F(@tuple.type.as.A.impl.%V1.loc14_14.2: type, @tuple.type.as.A.impl.%V2.loc14_25.2: type, @tuple.type.as.A.impl.%W.loc14_36.2: type, %U.loc17_8.2: type) { // CHECK:STDOUT: %U.loc17_8.1: type = bind_symbolic_name U, 3 [symbolic = %U.loc17_8.1 (constants.%U.753)] // CHECK:STDOUT: %pattern_type.loc17_18: type = pattern_type %U.loc17_8.1 [symbolic = %pattern_type.loc17_18 (constants.%pattern_type.549)] @@ -1224,16 +1052,20 @@ fn CallIndirect() { // CHECK:STDOUT: %.loc24_38.6: %Z = bind_value %.loc24_38.5 // CHECK:STDOUT: %tuple.type.as.A.impl.F.call: init %tuple.type.415 = call %specific_fn(%.loc24_38.6) to %.loc24_39.1 // CHECK:STDOUT: %.loc24_39.2: ref %tuple.type.415 = temporary %.loc24_39.1, %tuple.type.as.A.impl.F.call -// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%tuple.type.415, () [concrete = constants.%facet_value.71a] -// CHECK:STDOUT: %.loc24_39.3: %type_where = converted constants.%tuple.type.415, %facet_value [concrete = constants.%facet_value.71a] -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc24_39.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.f1a -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.f1a, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.71a) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %.loc24_39.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value.loc24_39: %type_where = facet_value constants.%tuple.type.415, () [concrete = constants.%facet_value.71a] +// CHECK:STDOUT: %.loc24_39.3: %type_where = converted constants.%tuple.type.415, %facet_value.loc24_39 [concrete = constants.%facet_value.71a] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc24_39: = bound_method %.loc24_39.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.f1a +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.f1a, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.71a) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.578] +// CHECK:STDOUT: %bound_method.loc24_39: = bound_method %.loc24_39.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc24_39: %ptr.ad9 = addr_of %.loc24_39.2 -// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr.loc24_39) -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.bound: = bound_method %.loc24_38.4, constants.%Z.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc24_39: init %empty_tuple.type = call %bound_method.loc24_39(%addr.loc24_39) +// CHECK:STDOUT: %facet_value.loc24_38: %type_where = facet_value constants.%Z, () [concrete = constants.%facet_value.4e3] +// CHECK:STDOUT: %.loc24_38.7: %type_where = converted constants.%Z, %facet_value.loc24_38 [concrete = constants.%facet_value.4e3] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc24_38: = bound_method %.loc24_38.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.dd5 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.dd5, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e7d] +// CHECK:STDOUT: %bound_method.loc24_38: = bound_method %.loc24_38.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc24_38: %ptr.fb6 = addr_of %.loc24_38.4 -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Z.as.Destroy.impl.Op.bound(%addr.loc24_38) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc24_38: init %empty_tuple.type = call %bound_method.loc24_38(%addr.loc24_38) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1284,9 +1116,13 @@ fn CallIndirect() { // CHECK:STDOUT: %bound_method.loc28_12.2: = bound_method %.loc28_12.3, %specific_impl_fn.loc28_12.1 // CHECK:STDOUT: %addr.loc28_12: @CallGeneric.%ptr (%ptr.563) = addr_of %.loc28_12.3 // CHECK:STDOUT: %.loc28_12.5: init %empty_tuple.type = call %bound_method.loc28_12.2(%addr.loc28_12) -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.bound: = bound_method %.loc28_11.4, constants.%Z.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc28_11: %type_where = facet_value constants.%Z, () [concrete = constants.%facet_value.4e3] +// CHECK:STDOUT: %.loc28_11.7: %type_where = converted constants.%Z, %facet_value.loc28_11 [concrete = constants.%facet_value.4e3] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc28_11.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.dd5 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.dd5, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.e7d] +// CHECK:STDOUT: %bound_method.loc28_11: = bound_method %.loc28_11.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc28_11: %ptr.fb6 = addr_of %.loc28_11.4 -// CHECK:STDOUT: %Z.as.Destroy.impl.Op.call: init %empty_tuple.type = call %Z.as.Destroy.impl.Op.bound(%addr.loc28_11) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc28_11(%addr.loc28_11) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -1453,7 +1289,7 @@ fn CallIndirect() { // CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.684 // CHECK:STDOUT: %.loc28_12.6 => constants.%.27f // CHECK:STDOUT: %impl.elem0.loc28_12.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.f1a -// CHECK:STDOUT: %specific_impl_fn.loc28_12.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %specific_impl_fn.loc28_12.2 => constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.578 // CHECK:STDOUT: %ptr => constants.%ptr.ad9 // CHECK:STDOUT: %require_complete.loc28_12.2 => constants.%complete_type.e23 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/class/class.carbon b/toolchain/check/testdata/interop/cpp/class/class.carbon index cfa749bb85d2..52df6d97a2e6 100644 --- a/toolchain/check/testdata/interop/cpp/class/class.carbon +++ b/toolchain/check/testdata/interop/cpp/class/class.carbon @@ -492,18 +492,11 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Bar [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Derived.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] -// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.type: type = fn_type @Derived.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op: %Derived.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.36d: type = struct_type {.base: %Bar} [concrete] // CHECK:STDOUT: %complete_type.fff: = complete_type_witness %struct_type.base.36d [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: %.c07: type = cpp_overload_set_type @Derived.as.Destroy.impl.Op [concrete] +// CHECK:STDOUT: %.c07: type = cpp_overload_set_type @Bar.foo [concrete] // CHECK:STDOUT: %empty_struct: %.c07 = struct_value () [concrete] // CHECK:STDOUT: %Bar.foo.type: type = fn_type @Bar.foo [concrete] // CHECK:STDOUT: %Bar.foo: %Bar.foo.type = struct_value () [concrete] @@ -515,7 +508,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %.617: %.c07 = cpp_overload_set_value @Derived.as.Destroy.impl.Op [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.617: %.c07 = cpp_overload_set_value @Bar.foo [concrete = constants.%empty_struct] // CHECK:STDOUT: %Bar.foo.decl: %Bar.foo.type = fn_decl @Bar.foo [concrete = constants.%Bar.foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: @@ -524,30 +517,10 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Derived.as.Destroy.impl: @Derived.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Derived.as.Destroy.impl.Op.decl: %Derived.as.Destroy.impl.Op.type = fn_decl @Derived.as.Destroy.impl.Op [concrete = constants.%Derived.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.605 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.605 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc7: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.404 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: %self: %ptr.404 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Derived.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Derived.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %.loc8: %Derived.elem = base_decl %Bar.ref, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] -// CHECK:STDOUT: impl_decl @Derived.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Derived.as.Destroy.impl.%Derived.as.Destroy.impl.Op.decl), @Derived.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.36d [concrete = constants.%complete_type.fff] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -559,8 +532,6 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: extend %Bar.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Derived.as.Destroy.impl.Op(%self.param: %ptr.404) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] diff --git a/toolchain/check/testdata/interop/cpp/class/method.carbon b/toolchain/check/testdata/interop/cpp/class/method.carbon index dad431e15a13..b8f53cc637f9 100644 --- a/toolchain/check/testdata/interop/cpp/class/method.carbon +++ b/toolchain/check/testdata/interop/cpp/class/method.carbon @@ -326,11 +326,13 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %HasQualifiers.F.type.d208f0.2: type = fn_type @HasQualifiers.F.2 [concrete] // CHECK:STDOUT: %HasQualifiers.F.efd4e4.2: %HasQualifiers.F.type.d208f0.2 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.type.142: type = fn_type @ptr.as.Destroy.impl.Op, @ptr.as.Destroy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.c04: %ptr.as.Destroy.impl.Op.type.142 = struct_value () [concrete] // CHECK:STDOUT: %ptr.5d5: type = ptr_type %ptr.235 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -391,11 +393,13 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: %bound_method.loc9_3: = bound_method %b.var, %ptr.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc9_3: %ptr.5d5 = addr_of %b.var // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc9_3(%addr.loc9_3) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%Int.as.Destroy.impl.Op.796 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_3: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_3: = bound_method %a.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_3: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_3: %ptr.235 = addr_of %a.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_3(%addr.loc8_3) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_3(%addr.loc8_3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/arithmetic_types_bridged.carbon b/toolchain/check/testdata/interop/cpp/function/arithmetic_types_bridged.carbon index 46684408f357..d2399470d27b 100644 --- a/toolchain/check/testdata/interop/cpp/function/arithmetic_types_bridged.carbon +++ b/toolchain/check/testdata/interop/cpp/function/arithmetic_types_bridged.carbon @@ -710,8 +710,10 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound: = bound_method %int_-1.416, %Int.as.Copy.impl.Op.342 [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.342, @Int.as.Copy.impl.Op(%int_8) [concrete] // CHECK:STDOUT: %bound_method.db2: = bound_method %int_-1.416, %Int.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.b72: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_8) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.13e: %Int.as.Destroy.impl.Op.type.b72 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i8, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.489: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.054: %AggregateT.as_type.as.Destroy.impl.Op.type.489 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -760,11 +762,13 @@ fn F() { // CHECK:STDOUT: %.loc8_11.6: ref %i8 = temporary %.loc8_11.5, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_13: %ptr.5c1 = addr_of %.loc8_11.6 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_13) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.6, constants.%Int.as.Destroy.impl.Op.13e +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i8, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_11.7: %type_where = converted constants.%i8, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.6, constants.%AggregateT.as_type.as.Destroy.impl.Op.054 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_11.6: = bound_method %.loc8_11.6, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_11.6: = bound_method %.loc8_11.6, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_11: %ptr.5c1 = addr_of %.loc8_11.6 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_11.6(%addr.loc8_11) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_11.6(%addr.loc8_11) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -807,8 +811,10 @@ fn F() { // CHECK:STDOUT: %UInt.as.Copy.impl.Op.bound: = bound_method %int_1.e80, %UInt.as.Copy.impl.Op.0cf [concrete] // CHECK:STDOUT: %UInt.as.Copy.impl.Op.specific_fn: = specific_function %UInt.as.Copy.impl.Op.0cf, @UInt.as.Copy.impl.Op(%int_8) [concrete] // CHECK:STDOUT: %bound_method.501: = bound_method %int_1.e80, %UInt.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %UInt.as.Destroy.impl.Op.type.11e: type = fn_type @UInt.as.Destroy.impl.Op, @UInt.as.Destroy.impl(%int_8) [concrete] -// CHECK:STDOUT: %UInt.as.Destroy.impl.Op.4fa: %UInt.as.Destroy.impl.Op.type.11e = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %u8, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.7cc: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.9cc: %AggregateT.as_type.as.Destroy.impl.Op.type.7cc = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -849,11 +855,13 @@ fn F() { // CHECK:STDOUT: %.loc8_11.4: ref %u8 = temporary %.loc8_11.3, %UInt.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_12: %ptr.3e8 = addr_of %.loc8_11.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_12) -// CHECK:STDOUT: %UInt.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.4, constants.%UInt.as.Destroy.impl.Op.4fa +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%u8, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_11.5: %type_where = converted constants.%u8, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.9cc // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_11.5: = bound_method %.loc8_11.4, %UInt.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_11.5: = bound_method %.loc8_11.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_11: %ptr.3e8 = addr_of %.loc8_11.4 -// CHECK:STDOUT: %UInt.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_11.5(%addr.loc8_11) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_11.5(%addr.loc8_11) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -885,8 +893,10 @@ fn F() { // CHECK:STDOUT: %char.as.Copy.impl.Op.type: type = fn_type @char.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %char.as.Copy.impl.Op: %char.as.Copy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %char.as.Copy.impl.Op.bound: = bound_method %int_88, %char.as.Copy.impl.Op [concrete] -// CHECK:STDOUT: %char.as.Destroy.impl.Op.type: type = fn_type @char.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %char.as.Destroy.impl.Op: %char.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %char, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.6ed: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.9d8: %AggregateT.as_type.as.Destroy.impl.Op.type.6ed = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -923,9 +933,13 @@ fn F() { // CHECK:STDOUT: %.loc8_11.5: ref %char = temporary %.loc8_11.4, %char.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_14: %ptr.fb0 = addr_of %.loc8_11.5 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_14) -// CHECK:STDOUT: %char.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.5, constants.%char.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%char, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_11.6: %type_where = converted constants.%char, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.5, constants.%AggregateT.as_type.as.Destroy.impl.Op.9d8 +// CHECK:STDOUT: +// CHECK:STDOUT: %bound_method.loc8_11.3: = bound_method %.loc8_11.5, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_11: %ptr.fb0 = addr_of %.loc8_11.5 -// CHECK:STDOUT: %char.as.Destroy.impl.Op.call: init %empty_tuple.type = call %char.as.Destroy.impl.Op.bound(%addr.loc8_11) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_11.3(%addr.loc8_11) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1099,8 +1113,10 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.3dc [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.7c2: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1143,11 +1159,13 @@ fn F() { // CHECK:STDOUT: %.loc8_13.4: ref %i16 = temporary %.loc8_13.3, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_19: %ptr.251 = addr_of %.loc8_13.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_19) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%Int.as.Destroy.impl.Op.431 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_13.5: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_13: %ptr.251 = addr_of %.loc8_13.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1190,8 +1208,10 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound: = bound_method %int_32767.faa, %Int.as.Copy.impl.Op.3dc [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.556: = bound_method %int_32767.faa, %Int.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1232,11 +1252,13 @@ fn F() { // CHECK:STDOUT: %.loc8_11.4: ref %i16 = temporary %.loc8_11.3, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_17: %ptr.251 = addr_of %.loc8_11.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_17) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.4, constants.%Int.as.Destroy.impl.Op.431 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_11.5: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_11.5: = bound_method %.loc8_11.4, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_11.5: = bound_method %.loc8_11.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_11: %ptr.251 = addr_of %.loc8_11.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_11.5(%addr.loc8_11) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_11.5(%addr.loc8_11) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1288,8 +1310,10 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound: = bound_method %int_-32768.7e5, %Int.as.Copy.impl.Op.3dc [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.b72: = bound_method %int_-32768.7e5, %Int.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1338,11 +1362,13 @@ fn F() { // CHECK:STDOUT: %.loc8_11.6: ref %i16 = temporary %.loc8_11.5, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_18: %ptr.251 = addr_of %.loc8_11.6 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_18) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.6, constants.%Int.as.Destroy.impl.Op.431 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_11.7: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_11.6, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_11.6: = bound_method %.loc8_11.6, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_11.6: = bound_method %.loc8_11.6, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_11: %ptr.251 = addr_of %.loc8_11.6 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_11.6(%addr.loc8_11) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_11.6(%addr.loc8_11) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1385,8 +1411,10 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.3dc [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.7c2: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1429,11 +1457,13 @@ fn F() { // CHECK:STDOUT: %.loc8_13.4: ref %i16 = temporary %.loc8_13.3, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_19: %ptr.251 = addr_of %.loc8_13.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_19) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%Int.as.Destroy.impl.Op.431 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_13.5: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_13: %ptr.251 = addr_of %.loc8_13.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1476,8 +1506,10 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.3dc [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.7c2: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1520,11 +1552,13 @@ fn F() { // CHECK:STDOUT: %.loc8_13.4: ref %i16 = temporary %.loc8_13.3, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_19: %ptr.251 = addr_of %.loc8_13.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_19) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%Int.as.Destroy.impl.Op.431 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_13.5: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_13: %ptr.251 = addr_of %.loc8_13.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1567,8 +1601,10 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.3dc [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.7c2: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1611,11 +1647,13 @@ fn F() { // CHECK:STDOUT: %.loc8_13.4: ref %i16 = temporary %.loc8_13.3, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_19: %ptr.251 = addr_of %.loc8_13.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_19) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%Int.as.Destroy.impl.Op.431 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_13.5: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_13: %ptr.251 = addr_of %.loc8_13.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1658,8 +1696,10 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.bound: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.3dc [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.7c2: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1702,11 +1742,13 @@ fn F() { // CHECK:STDOUT: %.loc8_13.4: ref %i16 = temporary %.loc8_13.3, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_19: %ptr.251 = addr_of %.loc8_13.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_19) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%Int.as.Destroy.impl.Op.431 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_13.5: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_13: %ptr.251 = addr_of %.loc8_13.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1748,8 +1790,10 @@ fn F() { // CHECK:STDOUT: %Float.as.Copy.impl.Op.bound: = bound_method %float.032, %Float.as.Copy.impl.Op.9e9 [concrete] // CHECK:STDOUT: %Float.as.Copy.impl.Op.specific_fn: = specific_function %Float.as.Copy.impl.Op.9e9, @Float.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.086: = bound_method %float.032, %Float.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.type.e84: type = fn_type @Float.as.Destroy.impl.Op, @Float.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.7c3: %Float.as.Destroy.impl.Op.type.e84 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %f16.a6a, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.2d8: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.62c: %AggregateT.as_type.as.Destroy.impl.Op.type.2d8 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1792,11 +1836,13 @@ fn F() { // CHECK:STDOUT: %.loc8_15.4: ref %f16.a6a = temporary %.loc8_15.3, %Float.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_21: %ptr.823 = addr_of %.loc8_15.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_21) -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.bound: = bound_method %.loc8_15.4, constants.%Float.as.Destroy.impl.Op.7c3 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%f16.a6a, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_15.5: %type_where = converted constants.%f16.a6a, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_15.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.62c // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_15.5: = bound_method %.loc8_15.4, %Float.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_15.5: = bound_method %.loc8_15.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_15: %ptr.823 = addr_of %.loc8_15.4 -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_15.5(%addr.loc8_15) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_15.5(%addr.loc8_15) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1838,8 +1884,10 @@ fn F() { // CHECK:STDOUT: %Float.as.Copy.impl.Op.bound: = bound_method %float.4cb, %Float.as.Copy.impl.Op.4fd [concrete] // CHECK:STDOUT: %Float.as.Copy.impl.Op.specific_fn: = specific_function %Float.as.Copy.impl.Op.4fd, @Float.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %bound_method.21c: = bound_method %float.4cb, %Float.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.type.45b: type = fn_type @Float.as.Destroy.impl.Op, @Float.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.5ec: %Float.as.Destroy.impl.Op.type.45b = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %f32.97e, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.482: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.8e2: %AggregateT.as_type.as.Destroy.impl.Op.type.482 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1882,11 +1930,13 @@ fn F() { // CHECK:STDOUT: %.loc8_15.4: ref %f32.97e = temporary %.loc8_15.3, %Float.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_21: %ptr.0bc = addr_of %.loc8_15.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_21) -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.bound: = bound_method %.loc8_15.4, constants.%Float.as.Destroy.impl.Op.5ec +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%f32.97e, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_15.5: %type_where = converted constants.%f32.97e, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_15.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.8e2 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_15.5: = bound_method %.loc8_15.4, %Float.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_15.5: = bound_method %.loc8_15.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_15: %ptr.0bc = addr_of %.loc8_15.4 -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_15.5(%addr.loc8_15) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_15.5(%addr.loc8_15) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1928,8 +1978,10 @@ fn F() { // CHECK:STDOUT: %Float.as.Copy.impl.Op.bound: = bound_method %float.0fc, %Float.as.Copy.impl.Op.5b0 [concrete] // CHECK:STDOUT: %Float.as.Copy.impl.Op.specific_fn: = specific_function %Float.as.Copy.impl.Op.5b0, @Float.as.Copy.impl.Op(%int_64) [concrete] // CHECK:STDOUT: %bound_method.c97: = bound_method %float.0fc, %Float.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.type.952: type = fn_type @Float.as.Destroy.impl.Op, @Float.as.Destroy.impl(%int_64) [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.b8c: %Float.as.Destroy.impl.Op.type.952 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %f64.d77, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.fb8: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.0bc: %AggregateT.as_type.as.Destroy.impl.Op.type.fb8 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1972,11 +2024,13 @@ fn F() { // CHECK:STDOUT: %.loc8_15.4: ref %f64.d77 = temporary %.loc8_15.3, %Float.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_21: %ptr.bcc = addr_of %.loc8_15.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_21) -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.bound: = bound_method %.loc8_15.4, constants.%Float.as.Destroy.impl.Op.b8c +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%f64.d77, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_15.5: %type_where = converted constants.%f64.d77, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_15.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.0bc // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_15.5: = bound_method %.loc8_15.4, %Float.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_15.5: = bound_method %.loc8_15.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_15: %ptr.bcc = addr_of %.loc8_15.4 -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_15.5(%addr.loc8_15) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_15.5(%addr.loc8_15) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2018,8 +2072,10 @@ fn F() { // CHECK:STDOUT: %Float.as.Copy.impl.Op.bound: = bound_method %float.709, %Float.as.Copy.impl.Op.249 [concrete] // CHECK:STDOUT: %Float.as.Copy.impl.Op.specific_fn: = specific_function %Float.as.Copy.impl.Op.249, @Float.as.Copy.impl.Op(%int_128) [concrete] // CHECK:STDOUT: %bound_method.435: = bound_method %float.709, %Float.as.Copy.impl.Op.specific_fn [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.type.cbc: type = fn_type @Float.as.Destroy.impl.Op, @Float.as.Destroy.impl(%int_128) [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.33b: %Float.as.Destroy.impl.Op.type.cbc = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %f128.b8c, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.8fc: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.1c0: %AggregateT.as_type.as.Destroy.impl.Op.type.8fc = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -2062,11 +2118,13 @@ fn F() { // CHECK:STDOUT: %.loc8_15.4: ref %f128.b8c = temporary %.loc8_15.3, %Float.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_22: %ptr.402 = addr_of %.loc8_15.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_22) -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.bound: = bound_method %.loc8_15.4, constants.%Float.as.Destroy.impl.Op.33b +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%f128.b8c, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_15.5: %type_where = converted constants.%f128.b8c, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_15.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.1c0 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_15.5: = bound_method %.loc8_15.4, %Float.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_15.5: = bound_method %.loc8_15.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_15: %ptr.402 = addr_of %.loc8_15.4 -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_15.5(%addr.loc8_15) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_15.5(%addr.loc8_15) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/full_semir.carbon b/toolchain/check/testdata/interop/cpp/function/full_semir.carbon index 21579b46ebf3..4fc56aaa1fcb 100644 --- a/toolchain/check/testdata/interop/cpp/function/full_semir.carbon +++ b/toolchain/check/testdata/interop/cpp/function/full_semir.carbon @@ -112,9 +112,11 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.7c2: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.specific_fn [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.431, @Int.as.Destroy.impl.Op(%int_16) [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.ce5, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -188,11 +190,13 @@ fn F() { // CHECK:STDOUT: %.loc7_13.4: ref %i16 = temporary %.loc7_13.3, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc7_19: %ptr.251 = addr_of %.loc7_13.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc7_19) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc7_13.4, constants.%Int.as.Destroy.impl.Op.431 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.431, @Int.as.Destroy.impl.Op(constants.%int_16) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc7_13.5: = bound_method %.loc7_13.4, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc7_13.5: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc7_13.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc7_13.5: = bound_method %.loc7_13.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc7_13: %ptr.251 = addr_of %.loc7_13.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc7_13.5(%addr.loc7_13) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc7_13.5(%addr.loc7_13) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/inline.carbon b/toolchain/check/testdata/interop/cpp/function/inline.carbon index fd5580d05067..7ba7c382d6a4 100644 --- a/toolchain/check/testdata/interop/cpp/function/inline.carbon +++ b/toolchain/check/testdata/interop/cpp/function/inline.carbon @@ -209,8 +209,10 @@ fn MyF() { // CHECK:STDOUT: %empty_struct.258: %.a8c = struct_value () [concrete] // CHECK:STDOUT: %ThunkOnBoth__carbon_thunk.type: type = fn_type @ThunkOnBoth__carbon_thunk [concrete] // CHECK:STDOUT: %ThunkOnBoth__carbon_thunk: %ThunkOnBoth__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -359,16 +361,20 @@ fn MyF() { // CHECK:STDOUT: %.loc16_34.3: %i16 = value_of_initializer %.loc16_34.2 // CHECK:STDOUT: %.loc16_34.4: %i16 = converted %.loc16_34.2, %.loc16_34.3 // CHECK:STDOUT: %r4: %i16 = bind_name r4, %.loc16_34.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc16: = bound_method %.loc16_33.4, constants.%Int.as.Destroy.impl.Op.431 +// CHECK:STDOUT: %facet_value.loc16: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc16_33.5: %type_where = converted constants.%i16, %facet_value.loc16 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc16: = bound_method %.loc16_33.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc16_33.5: = bound_method %.loc16_33.4, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %bound_method.loc16_33.5: = bound_method %.loc16_33.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc16_33: %ptr.251 = addr_of %.loc16_33.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc16: init %empty_tuple.type = call %bound_method.loc16_33.5(%addr.loc16_33) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc14: = bound_method %.loc14_32.4, constants.%Int.as.Destroy.impl.Op.431 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc16: init %empty_tuple.type = call %bound_method.loc16_33.5(%addr.loc16_33) +// CHECK:STDOUT: %facet_value.loc14: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc14_32.5: %type_where = converted constants.%i16, %facet_value.loc14 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc14: = bound_method %.loc14_32.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc14_32.5: = bound_method %.loc14_32.4, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %bound_method.loc14_32.5: = bound_method %.loc14_32.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc14_32: %ptr.251 = addr_of %.loc14_32.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc14: init %empty_tuple.type = call %bound_method.loc14_32.5(%addr.loc14_32) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc14: init %empty_tuple.type = call %bound_method.loc14_32.5(%addr.loc14_32) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/overloads.carbon b/toolchain/check/testdata/interop/cpp/function/overloads.carbon index 5a445f71ee7d..dd6462e84c58 100644 --- a/toolchain/check/testdata/interop/cpp/function/overloads.carbon +++ b/toolchain/check/testdata/interop/cpp/function/overloads.carbon @@ -373,9 +373,11 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.7c2: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.specific_fn [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.431, @Int.as.Destroy.impl.Op(%int_16) [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.ce5, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -449,11 +451,13 @@ fn F() { // CHECK:STDOUT: %.loc7_13.4: ref %i16 = temporary %.loc7_13.3, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc7_19: %ptr.251 = addr_of %.loc7_13.4 // CHECK:STDOUT: %bar__carbon_thunk.call: init %empty_tuple.type = call imports.%bar__carbon_thunk.decl(%addr.loc7_19) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc7_13.4, constants.%Int.as.Destroy.impl.Op.431 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.431, @Int.as.Destroy.impl.Op(constants.%int_16) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc7_13.5: = bound_method %.loc7_13.4, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc7_13.5: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc7_13.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc7_13.5: = bound_method %.loc7_13.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc7_13: %ptr.251 = addr_of %.loc7_13.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc7_13.5(%addr.loc7_13) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc7_13.5(%addr.loc7_13) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -620,9 +624,11 @@ fn F() { // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.3dc, @Int.as.Copy.impl.Op(%int_16) [concrete] // CHECK:STDOUT: %bound_method.7c2: = bound_method %int_1.f90, %Int.as.Copy.impl.Op.specific_fn [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.038: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_16) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.431: %Int.as.Destroy.impl.Op.type.038 = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.431, @Int.as.Destroy.impl.Op(%int_16) [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i16, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.054: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.ce5: %AggregateT.as_type.as.Destroy.impl.Op.type.054 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.ce5, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -720,11 +726,13 @@ fn F() { // CHECK:STDOUT: %.loc8_13.4: ref %i16 = temporary %.loc8_13.3, %Int.as.Copy.impl.Op.call // CHECK:STDOUT: %addr.loc8_19: %ptr.251 = addr_of %.loc8_13.4 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_19) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%Int.as.Destroy.impl.Op.431 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.431, @Int.as.Destroy.impl.Op(constants.%int_16) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i16, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_13.5: %type_where = converted constants.%i16, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %.loc8_13.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.ce5, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc8_13.5: = bound_method %.loc8_13.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8_13: %ptr.251 = addr_of %.loc8_13.4 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_13.5(%addr.loc8_13) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/typedef.carbon b/toolchain/check/testdata/interop/cpp/typedef.carbon index 5c051d4cfd39..13be5b5cf267 100644 --- a/toolchain/check/testdata/interop/cpp/typedef.carbon +++ b/toolchain/check/testdata/interop/cpp/typedef.carbon @@ -84,11 +84,13 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.235, (%Copy.impl_witness.a93) [concrete] // CHECK:STDOUT: %.9e2: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: = specific_function %ptr.as.Copy.impl.Op.9fb, @ptr.as.Copy.impl.Op(%i32) [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.type.142: type = fn_type @ptr.as.Destroy.impl.Op, @ptr.as.Destroy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.c04: %ptr.as.Destroy.impl.Op.type.142 = struct_value () [concrete] // CHECK:STDOUT: %ptr.5d5: type = ptr_type %ptr.235 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -116,8 +118,8 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: %specific_fn.loc8: = specific_function %impl.elem0.loc8, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc8_3.2: = bound_method %int_42, %specific_fn.loc8 [concrete = constants.%bound_method] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc8_3.2(%int_42) [concrete = constants.%int_42.c68] -// CHECK:STDOUT: %.loc8_3: init %i32 = converted %int_42, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_42.c68] -// CHECK:STDOUT: assign %n.var, %.loc8_3 +// CHECK:STDOUT: %.loc8_3.1: init %i32 = converted %int_42, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_42.c68] +// CHECK:STDOUT: assign %n.var, %.loc8_3.1 // CHECK:STDOUT: %.loc8_13: type = splice_block %foo.ref [concrete = constants.%i32] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: @@ -149,11 +151,13 @@ fn H(var c: Cpp.C, var d: Cpp.D) { // CHECK:STDOUT: %bound_method.loc10_3: = bound_method %p.var, %ptr.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc10_3: %ptr.5d5 = addr_of %p.var // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10_3(%addr.loc10_3) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %n.var, constants.%Int.as.Destroy.impl.Op.796 +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc8_3.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %n.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad // CHECK:STDOUT: -// CHECK:STDOUT: %bound_method.loc8_3.3: = bound_method %n.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %bound_method.loc8_3.3: = bound_method %n.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc8: %ptr.235 = addr_of %n.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_3.3(%addr.loc8) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc8_3.3(%addr.loc8) // CHECK:STDOUT: // 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 c6b989560a86..8d3aa2562f04 100644 --- a/toolchain/check/testdata/let/compile_time_bindings.carbon +++ b/toolchain/check/testdata/let/compile_time_bindings.carbon @@ -165,30 +165,21 @@ impl i32 as Empty { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %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 = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -200,26 +191,10 @@ impl i32 as Empty { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.cb1 = return_slot_pattern [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param0 [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc5_14.2: type = converted %.loc5_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -227,7 +202,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.cb1 = binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_17.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc10_12.1: type = splice_block %.loc10_12.3 [concrete = constants.%empty_tuple.type] { @@ -238,10 +213,6 @@ impl i32 as Empty { // 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 = bind_name x, %.loc10_17.2 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -259,8 +230,6 @@ impl i32 as Empty { // CHECK:STDOUT: return %.loc5_26 to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_let_before.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -268,28 +237,19 @@ impl i32 as Empty { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -301,25 +261,9 @@ impl i32 as Empty { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_17.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc9_12.1: type = splice_block %.loc9_12.3 [concrete = constants.%empty_tuple.type] { @@ -331,18 +275,14 @@ impl i32 as Empty { // CHECK:STDOUT: %.loc9_17.2: %empty_tuple.type = converted %.loc9_17.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %x: %empty_tuple.type = bind_name x, %.loc9_17.2 // CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [concrete = constants.%C.F] { -// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param0 [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc10_14.2: type = converted %.loc10_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %return.param: ref %empty_tuple.type = out_param call_param0 // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -360,8 +300,6 @@ impl i32 as Empty { // CHECK:STDOUT: return %.loc10_26 to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_multiple_lets.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -380,13 +318,6 @@ impl i32 as Empty { // CHECK:STDOUT: %ptr.7fe: type = ptr_type %tuple.type.2d5 [concrete] // CHECK:STDOUT: %pattern_type.8c1: type = pattern_type %tuple.type.2d5 [concrete] // CHECK:STDOUT: %tuple.7e4: %tuple.type.2d5 = tuple_value (%empty_tuple, %empty_tuple, %empty_tuple) [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %tuple.type.bcd: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] @@ -398,6 +329,7 @@ impl i32 as Empty { // CHECK:STDOUT: %tuple.f41: %tuple.type.9fb = tuple_value (%empty_tuple) [concrete] // CHECK:STDOUT: %tuple.elem0.eaf: %empty_tuple.type = tuple_access %c, element0 [symbolic] // CHECK:STDOUT: %tuple.elem1: %empty_tuple.type = tuple_access %c, element1 [symbolic] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %facet_value.c7f: %type_where = facet_value %tuple.type.2d5, () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.b05: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.c7f) [concrete] @@ -437,22 +369,6 @@ impl i32 as Empty { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a [concrete] @@ -505,10 +421,6 @@ impl i32 as Empty { // CHECK:STDOUT: %tuple: %tuple.type.2d5 = tuple_value (%.loc22_37.2, %.loc22_37.3, %.loc22_37.4) [concrete = constants.%tuple.7e4] // CHECK:STDOUT: %.loc22_37.5: %tuple.type.2d5 = converted %.loc22_37.1, %tuple [concrete = constants.%tuple.7e4] // CHECK:STDOUT: %d: %tuple.type.2d5 = bind_name d, %.loc22_37.5 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -676,8 +588,6 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: specific @C.F(constants.%b) { // CHECK:STDOUT: %b.loc10_8.1 => constants.%b // CHECK:STDOUT: } @@ -687,16 +597,9 @@ impl i32 as Empty { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %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: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -704,11 +607,9 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -720,26 +621,10 @@ impl i32 as Empty { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.cb1 = return_slot_pattern [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param0 [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc5_14.2: type = converted %.loc5_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -747,12 +632,8 @@ 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.cb1 = binding_pattern x [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -770,8 +651,6 @@ impl i32 as Empty { // CHECK:STDOUT: return %.loc5_26 to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- use_in_function.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1104,13 +983,6 @@ impl i32 as Empty { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %I.F.type: type = fn_type @I.F [concrete] // CHECK:STDOUT: %I.F: %I.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @I.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.9fe: type = ptr_type %I [concrete] -// CHECK:STDOUT: %pattern_type.21d: type = pattern_type %ptr.9fe [concrete] -// CHECK:STDOUT: %I.as.Destroy.impl.Op.type: type = fn_type @I.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %I.as.Destroy.impl.Op: %I.as.Destroy.impl.Op.type = 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: } @@ -1118,12 +990,10 @@ impl i32 as Empty { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1135,22 +1005,6 @@ impl i32 as Empty { // CHECK:STDOUT: %I.decl: type = class_decl @I [concrete = constants.%I] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @I.as.Destroy.impl: @I.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %I.as.Destroy.impl.Op.decl: %I.as.Destroy.impl.Op.type = fn_decl @I.as.Destroy.impl.Op [concrete = constants.%I.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.21d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.21d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.9fe = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%I [concrete = constants.%I] -// CHECK:STDOUT: %self: %ptr.9fe = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %I.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @I.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @I { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %T.patt: %pattern_type.98f = binding_pattern T [concrete] @@ -1167,10 +1021,6 @@ impl i32 as Empty { // CHECK:STDOUT: %return.param: ref = out_param call_param0 // CHECK:STDOUT: %return: ref = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%I [concrete = constants.%I] -// CHECK:STDOUT: impl_decl @I.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@I.as.Destroy.impl.%I.as.Destroy.impl.Op.decl), @I.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -1182,8 +1032,6 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: fn @I.F() -> ; // CHECK:STDOUT: -// CHECK:STDOUT: fn @I.as.Destroy.impl.Op(%self.param: %ptr.9fe) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_return_in_package_scope.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/namespace/fail_not_top_level.carbon b/toolchain/check/testdata/namespace/fail_not_top_level.carbon index e2f70fabb420..87de3781feac 100644 --- a/toolchain/check/testdata/namespace/fail_not_top_level.carbon +++ b/toolchain/check/testdata/namespace/fail_not_top_level.carbon @@ -49,28 +49,19 @@ interface I { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %F.type.1cc: type = fn_type @F.loc30 [concrete] // CHECK:STDOUT: %F.f49: %F.type.1cc = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %I.type.116: type = facet_type <@I.loc33> [concrete] -// CHECK:STDOUT: %Self.7ee: %I.type.116 = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self: %I.type.116 = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %I.type.d37: type = fn_type @I.loc39 [concrete] // CHECK:STDOUT: %I: %I.type.d37 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -87,7 +78,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I.loc33 { -// CHECK:STDOUT: %Self: %I.type.116 = bind_symbolic_name Self, 0 [symbolic = constants.%Self.7ee] +// CHECK:STDOUT: %Self: %I.type.116 = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %N: = namespace [concrete] { // CHECK:STDOUT: .I = %I.decl // CHECK:STDOUT: } @@ -99,31 +90,11 @@ interface I { // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc24: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %N: = namespace [concrete] { // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.1cc = fn_decl @F.loc30 [concrete = constants.%F.f49] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -151,8 +122,6 @@ interface I { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.loc39(@I.loc33.%Self: %I.type.116) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -162,5 +131,5 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @I.loc39(constants.%Self.7ee) {} +// CHECK:STDOUT: specific @I.loc39(constants.%Self) {} // CHECK:STDOUT: diff --git a/toolchain/check/testdata/namespace/merging_with_indirections.carbon b/toolchain/check/testdata/namespace/merging_with_indirections.carbon index 11512f613cef..35d62d687e6d 100644 --- a/toolchain/check/testdata/namespace/merging_with_indirections.carbon +++ b/toolchain/check/testdata/namespace/merging_with_indirections.carbon @@ -49,24 +49,15 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @A.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.a87: type = ptr_type %A [concrete] -// CHECK:STDOUT: %pattern_type.ba7: type = pattern_type %ptr.a87 [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -81,27 +72,7 @@ fn Run() { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: @A.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %A.as.Destroy.impl.Op.decl: %A.as.Destroy.impl.Op.type = fn_decl @A.as.Destroy.impl.Op [concrete = constants.%A.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.ba7 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.ba7 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.a87 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: %self: %ptr.a87 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %A.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @A.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A [concrete = constants.%A] -// CHECK:STDOUT: impl_decl @A.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@A.as.Destroy.impl.%A.as.Destroy.impl.Op.decl), @A.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -109,23 +80,14 @@ fn Run() { // CHECK:STDOUT: .Self = constants.%A // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op(%self.param: %ptr.a87) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @B.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.958: type = ptr_type %B [concrete] -// CHECK:STDOUT: %pattern_type.533: type = pattern_type %ptr.958 [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op.type: type = fn_type @B.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %B.as.Destroy.impl.Op: %B.as.Destroy.impl.Op.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: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %pattern_type.045: type = pattern_type %A [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] @@ -139,11 +101,9 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %Other.A: type = import_ref Other//a, A, loaded [concrete = constants.%A] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: %Other.import_ref.8f2: = import_ref Other//a, loc5_14, loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %Other.import_ref.ca8 = import_ref Other//a, inst19 [no loc], unloaded // CHECK:STDOUT: } @@ -162,8 +122,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.patt: %pattern_type.045 = return_slot_pattern [concrete] -// CHECK:STDOUT: %return.param_patt: %pattern_type.045 = out_param_pattern %return.patt, call_param0 [concrete] +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete] +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 [concrete] // 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] @@ -172,27 +132,7 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @B.as.Destroy.impl: @B.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %B.as.Destroy.impl.Op.decl: %B.as.Destroy.impl.Op.type = fn_decl @B.as.Destroy.impl.Op [concrete = constants.%B.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.533 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.533 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.958 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: %self: %ptr.958 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %B.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @B.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] -// CHECK:STDOUT: impl_decl @B.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@B.as.Destroy.impl.%B.as.Destroy.impl.Op.decl), @B.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -207,8 +147,6 @@ fn Run() { // CHECK:STDOUT: .Self = imports.%Other.import_ref.ca8 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @B.as.Destroy.impl.Op(%self.param: %ptr.958) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %return.param: %A { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc8_27.1: %empty_struct_type = struct_literal () @@ -227,13 +165,15 @@ fn Run() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.272: type = pattern_type %A [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.9bf: = impl_witness imports.%Destroy.impl_witness_table.8d2 [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op.type: type = fn_type @A.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %A.as.Destroy.impl.Op: %A.as.Destroy.impl.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %A, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.709: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.84b: %AggregateT.as_type.as.Destroy.impl.Op.type.709 = struct_value () [concrete] // CHECK:STDOUT: %ptr.07e: type = ptr_type %A [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.84b, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -249,8 +189,8 @@ fn Run() { // CHECK:STDOUT: import Other//a // CHECK:STDOUT: } // CHECK:STDOUT: %Other.F: %F.type = import_ref Other//b, F, loaded [concrete = constants.%F] -// CHECK:STDOUT: %Other.import_ref.8db: = import_ref Other//b, inst70 [indirect], loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Other.import_ref.bbd = import_ref Other//b, inst71 [indirect], unloaded +// CHECK:STDOUT: %Other.import_ref.8db: = import_ref Other//b, inst30 [indirect], loaded [concrete = constants.%complete_type.357] +// CHECK:STDOUT: %Other.import_ref.bbd = import_ref Other//b, inst31 [indirect], unloaded // CHECK:STDOUT: %Other.NS1: = import_ref Other//b, NS1, loaded // CHECK:STDOUT: %NS1.b9a: = namespace %Other.NS1, [concrete] { // CHECK:STDOUT: .A = %Other.A @@ -259,11 +199,6 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %Other.A: type = import_ref Other//a, A, loaded [concrete = constants.%A] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Other.import_ref.f83: = import_ref Other//a, loc5_13, loaded [concrete = constants.%Destroy.impl_witness.9bf] -// CHECK:STDOUT: %Other.import_ref.ea8: type = import_ref Other//a, loc5_13, loaded [concrete = constants.%A] -// CHECK:STDOUT: %Other.import_ref.e45: type = import_ref Other//a, inst22 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %Other.import_ref.3d0: %A.as.Destroy.impl.Op.type = import_ref Other//a, loc5_13, loaded [concrete = constants.%A.as.Destroy.impl.Op] -// CHECK:STDOUT: %Destroy.impl_witness_table.8d2 = impl_witness_table (%Other.import_ref.3d0), @A.as.Destroy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -277,11 +212,6 @@ fn Run() { // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @A.as.Destroy.impl: imports.%Other.import_ref.ea8 as imports.%Other.import_ref.e45 [from "a.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%Other.import_ref.f83 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @A [from "b.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%Other.import_ref.8db // CHECK:STDOUT: @@ -301,7 +231,7 @@ fn Run() { // CHECK:STDOUT: %a.var_patt: %pattern_type.272 = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var %a.var_patt -// CHECK:STDOUT: %.loc10: type = splice_block %A.ref [concrete = constants.%A] { +// CHECK:STDOUT: %.loc10_19: type = splice_block %A.ref [concrete = constants.%A] { // CHECK:STDOUT: %Other.ref.loc10: = name_ref Other, imports.%Other [concrete = imports.%Other] // CHECK:STDOUT: %NS1.ref: = name_ref NS1, imports.%NS1.b9a [concrete = imports.%NS1.b9a] // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Other.A [concrete = constants.%A] @@ -313,16 +243,22 @@ fn Run() { // CHECK:STDOUT: %.loc13: ref %A = splice_block %a.ref {} // CHECK:STDOUT: %F.call.loc13: init %A = call %F.ref.loc13() to %.loc13 // CHECK:STDOUT: assign %a.ref, %F.call.loc13 -// CHECK:STDOUT: %A.as.Destroy.impl.Op.bound.loc10: = bound_method %a.var, constants.%A.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc10: %type_where = facet_value constants.%A, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc10_3: %type_where = converted constants.%A, %facet_value.loc10 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.84b +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.84b, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc10: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc10: %ptr.07e = addr_of %a.var -// CHECK:STDOUT: %A.as.Destroy.impl.Op.call.loc10: init %empty_tuple.type = call %A.as.Destroy.impl.Op.bound.loc10(%addr.loc10) -// CHECK:STDOUT: %A.as.Destroy.impl.Op.bound.loc7: = bound_method %.loc7_11.2, constants.%A.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10: init %empty_tuple.type = call %bound_method.loc10(%addr.loc10) +// CHECK:STDOUT: %facet_value.loc7: %type_where = facet_value constants.%A, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc7_11.3: %type_where = converted constants.%A, %facet_value.loc7 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7: = bound_method %.loc7_11.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.84b +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.84b, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc7: = bound_method %.loc7_11.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc7: %ptr.07e = addr_of %.loc7_11.2 -// CHECK:STDOUT: %A.as.Destroy.impl.Op.call.loc7: init %empty_tuple.type = call %A.as.Destroy.impl.Op.bound.loc7(%addr.loc7) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7: init %empty_tuple.type = call %bound_method.loc7(%addr.loc7) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F [from "b.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: fn @A.as.Destroy.impl.Op = "no_op" [from "a.carbon"]; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/namespace/shadow.carbon b/toolchain/check/testdata/namespace/shadow.carbon index ac5eb4eceb4c..3c8f9cc263c1 100644 --- a/toolchain/check/testdata/namespace/shadow.carbon +++ b/toolchain/check/testdata/namespace/shadow.carbon @@ -76,10 +76,12 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -152,8 +154,8 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: %specific_fn.loc26: = specific_function %impl.elem0.loc26, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc26_5.2: = bound_method %int_0.loc26, %specific_fn.loc26 [concrete = constants.%bound_method] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc26: init %i32 = call %bound_method.loc26_5.2(%int_0.loc26) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc26_5: init %i32 = converted %int_0.loc26, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc26 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %A.var, %.loc26_5 +// CHECK:STDOUT: %.loc26_5.1: init %i32 = converted %int_0.loc26, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc26 [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %A.var, %.loc26_5.1 // CHECK:STDOUT: %.loc26_12: type = splice_block %i32.loc26 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc26: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc26: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -166,11 +168,13 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: %specific_fn.loc29: = specific_function %impl.elem0.loc29, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc29_12.2: = bound_method %.loc29, %specific_fn.loc29 // CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc29_12.2(%.loc29) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc26_5.1: = bound_method %A.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc26_5.3: = bound_method %A.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc26_5.1: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc26_5.2: %type_where = converted constants.%i32, %facet_value.loc26_5.1 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc26_5.1: = bound_method %A.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc26_5.3: = bound_method %A.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc26_5.1: %ptr.235 = addr_of %A.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc26_5.1: init %empty_tuple.type = call %bound_method.loc26_5.3(%addr.loc26_5.1) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc26_5.1: init %empty_tuple.type = call %bound_method.loc26_5.3(%addr.loc26_5.1) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else: @@ -181,11 +185,13 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: %bound_method.loc31_11.2: = bound_method %int_0.loc31, %specific_fn.loc31 [concrete = constants.%bound_method] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc31: init %i32 = call %bound_method.loc31_11.2(%int_0.loc31) [concrete = constants.%int_0.6a9] // CHECK:STDOUT: %.loc31: init %i32 = converted %int_0.loc31, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc31 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc26_5.2: = bound_method %A.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc26_5.4: = bound_method %A.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %facet_value.loc26_5.2: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc26_5.3: %type_where = converted constants.%i32, %facet_value.loc26_5.2 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc26_5.2: = bound_method %A.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc26_5.4: = bound_method %A.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc26_5.2: %ptr.235 = addr_of %A.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc26_5.2: init %empty_tuple.type = call %bound_method.loc26_5.4(%addr.loc26_5.2) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc26_5.2: init %empty_tuple.type = call %bound_method.loc26_5.4(%addr.loc26_5.2) // CHECK:STDOUT: return %.loc31 to %return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/operators/builtin/assignment.carbon b/toolchain/check/testdata/operators/builtin/assignment.carbon index dcaadfc82f49..30dec59cec7d 100644 --- a/toolchain/check/testdata/operators/builtin/assignment.carbon +++ b/toolchain/check/testdata/operators/builtin/assignment.carbon @@ -126,9 +126,10 @@ fn Main() { // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.c59: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.5be) [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.e4f: %AggregateT.as_type.as.Destroy.impl.Op.type.c59 = struct_value () [concrete] // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.606: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.e4f, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.5be) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %facet_value.d23: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.d23) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.d23) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -172,8 +173,8 @@ fn Main() { // 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] // CHECK:STDOUT: %bound_method.loc16_3.2: = bound_method %int_12, %specific_fn.loc16 [concrete = constants.%bound_method.9c8] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc16: init %i32 = call %bound_method.loc16_3.2(%int_12) [concrete = constants.%int_12.1e1] -// CHECK:STDOUT: %.loc16_3: init %i32 = converted %int_12, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc16 [concrete = constants.%int_12.1e1] -// CHECK:STDOUT: assign %a.var, %.loc16_3 +// CHECK:STDOUT: %.loc16_3.1: init %i32 = converted %int_12, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc16 [concrete = constants.%int_12.1e1] +// CHECK:STDOUT: assign %a.var, %.loc16_3.1 // CHECK:STDOUT: %.loc16_10: type = splice_block %i32.loc16 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -374,11 +375,13 @@ fn Main() { // CHECK:STDOUT: %bound_method.loc19_3: = bound_method %b.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc19: %ptr.261 = addr_of %b.var // CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc19: init %empty_tuple.type = call %bound_method.loc19_3(%addr.loc19) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc16_3.3: = bound_method %a.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value.loc16: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %.loc16_3.2: %type_where = converted constants.%i32, %facet_value.loc16 [concrete = constants.%facet_value.d23] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc16: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.d23) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5a0] +// CHECK:STDOUT: %bound_method.loc16_3.3: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc16: %ptr.235 = addr_of %a.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc16_3.3(%addr.loc16) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc16: init %empty_tuple.type = call %bound_method.loc16_3.3(%addr.loc16) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: 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 02356dd29810..ec8970fbefd2 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 @@ -182,13 +182,6 @@ fn F() { // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C, @C(%B.7dd) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%B.7dd) [symbolic] -// CHECK:STDOUT: %ptr.1a8: type = ptr_type %C [symbolic] -// CHECK:STDOUT: %pattern_type.926: type = pattern_type %ptr.1a8 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%B.7dd) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %B.d97: type = class_type @B [concrete] @@ -196,45 +189,12 @@ fn F() { // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(.inst30.loc4_14: bool) { -// CHECK:STDOUT: %B: bool = bind_symbolic_name B, 0 [symbolic = %B (constants.%B.7dd)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%B) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%B) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%B) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.926) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.926) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_24.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.1a8) = value_param call_param0 -// CHECK:STDOUT: %.loc4_24.2: type = splice_block %Self.ref [symbolic = %C (constants.%C)] { -// CHECK:STDOUT: %.loc4_24.3: type = specific_constant constants.%C, @C(constants.%B.7dd) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_24.3 [symbolic = %C (constants.%C)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.1a8) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: generic class @C(.inst30.loc4_14: bool) { // CHECK:STDOUT: %B: bool = bind_symbolic_name B, 0 [symbolic = %B (constants.%B.7dd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [symbolic = @C.as.Destroy.impl.%C (constants.%C)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%B.7dd) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -256,33 +216,9 @@ fn F() { // CHECK:STDOUT: .C = // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(.inst30.loc4_14: bool) { -// CHECK:STDOUT: %B: bool = bind_symbolic_name B, 0 [symbolic = %B (constants.%B.7dd)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%B) [symbolic = %C (constants.%C)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.1a8)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.926)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.1a8)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F(); // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%B.7dd) { // CHECK:STDOUT: %B => constants.%B.7dd // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%B.7dd) { -// CHECK:STDOUT: %B => constants.%B.7dd -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%B.7dd) { -// CHECK:STDOUT: %B => constants.%B.7dd -// CHECK:STDOUT: %C => constants.%C -// CHECK:STDOUT: %ptr => constants.%ptr.1a8 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.926 -// CHECK:STDOUT: } -// CHECK:STDOUT: 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 49c0facf6ada..435bc39dbd6f 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 @@ -135,9 +135,11 @@ fn Main() { // CHECK:STDOUT: %bound_method.422: = bound_method %int_10.64f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_10.265: %i32 = int_value 10 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -232,8 +234,8 @@ fn Main() { // CHECK:STDOUT: %specific_fn.loc33: = specific_function %impl.elem0.loc33, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc33_3.2: = bound_method %int_0, %specific_fn.loc33 [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc33: init %i32 = call %bound_method.loc33_3.2(%int_0) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc33_3: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc33 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %n.var, %.loc33_3 +// CHECK:STDOUT: %.loc33_3.1: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc33 [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %n.var, %.loc33_3.1 // CHECK:STDOUT: %.loc33_10: type = splice_block %i32.loc33 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc33: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc33: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -340,7 +342,7 @@ fn Main() { // CHECK:STDOUT: %a.var_patt: %pattern_type.7ce = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var %a.var_patt -// CHECK:STDOUT: %.loc56: type = splice_block %i32.loc56 [concrete = constants.%i32] { +// CHECK:STDOUT: %.loc56_10: type = splice_block %i32.loc56 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc56: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc56: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } @@ -368,16 +370,20 @@ fn Main() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc61: init %i32 = call %bound_method.loc61_27.2(%int_10) [concrete = constants.%int_10.265] // CHECK:STDOUT: %.loc61_27: init %i32 = converted %int_10, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc61 [concrete = constants.%int_10.265] // CHECK:STDOUT: assign %.loc61_4, %.loc61_27 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc56: = bound_method %a.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc56: = bound_method %a.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc56: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc56_3: %type_where = converted constants.%i32, %facet_value.loc56 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc56: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc56: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc56: %ptr.235 = addr_of %a.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc56: init %empty_tuple.type = call %bound_method.loc56(%addr.loc56) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc33: = bound_method %n.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc33_3.3: = bound_method %n.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc56: init %empty_tuple.type = call %bound_method.loc56(%addr.loc56) +// CHECK:STDOUT: %facet_value.loc33: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc33_3.2: %type_where = converted constants.%i32, %facet_value.loc33 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc33: = bound_method %n.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc33_3.3: = bound_method %n.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc33: %ptr.235 = addr_of %n.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc33: init %empty_tuple.type = call %bound_method.loc33_3.3(%addr.loc33) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc33: init %empty_tuple.type = call %bound_method.loc33_3.3(%addr.loc33) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: 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 463c57a82321..6ab45cc0d7b9 100644 --- a/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon @@ -74,10 +74,12 @@ fn Main() { // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -143,8 +145,8 @@ fn Main() { // CHECK:STDOUT: %specific_fn.loc18: = specific_function %impl.elem0.loc18, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc18_3.2: = bound_method %int_3, %specific_fn.loc18 [concrete = constants.%bound_method.f36] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc18_3.2(%int_3) [concrete = constants.%int_3.822] -// CHECK:STDOUT: %.loc18_3: init %i32 = converted %int_3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_3.822] -// CHECK:STDOUT: assign %a.var, %.loc18_3 +// CHECK:STDOUT: %.loc18_3.1: init %i32 = converted %int_3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_3.822] +// CHECK:STDOUT: assign %a.var, %.loc18_3.1 // CHECK:STDOUT: %.loc18_10: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -165,11 +167,13 @@ fn Main() { // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] // CHECK:STDOUT: %F.call: init %i32 = call %F.ref() // CHECK:STDOUT: assign %a.ref.loc28_3, %F.call -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc18_3.3: = bound_method %a.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc18_3.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc18_3.3: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.235 = addr_of %a.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc18_3.3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc18_3.3(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: 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 5faba8596dc3..5db0d0bc3202 100644 --- a/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon @@ -54,10 +54,12 @@ fn Main() { // CHECK:STDOUT: %int_3.822: %i32 = int_value 3 [concrete] // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 56e-1 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -97,8 +99,8 @@ fn Main() { // 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] // CHECK:STDOUT: %bound_method.loc16_3.2: = bound_method %int_3, %specific_fn [concrete = constants.%bound_method] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc16_3.2(%int_3) [concrete = constants.%int_3.822] -// CHECK:STDOUT: %.loc16_3: init %i32 = converted %int_3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_3.822] -// CHECK:STDOUT: assign %a.var, %.loc16_3 +// CHECK:STDOUT: %.loc16_3.1: init %i32 = converted %int_3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_3.822] +// CHECK:STDOUT: assign %a.var, %.loc16_3.1 // CHECK:STDOUT: %.loc16_10: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -108,11 +110,13 @@ fn Main() { // CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 56e-1 [concrete = constants.%float] // CHECK:STDOUT: %.loc24: %i32 = converted %float, [concrete = ] // CHECK:STDOUT: assign %a.ref, -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc16_3.3: = bound_method %a.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc16_3.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc16_3.3: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.235 = addr_of %a.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc16_3.3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc16_3.3(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/operators/overloaded/add.carbon b/toolchain/check/testdata/operators/overloaded/add.carbon index 11bb8e188c82..fa519ad3a1c3 100644 --- a/toolchain/check/testdata/operators/overloaded/add.carbon +++ b/toolchain/check/testdata/operators/overloaded/add.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %AddWith.type.bfd: type = facet_type <@AddWith, @AddWith(%C)> [concrete] // CHECK:STDOUT: %AddWith.Op.type.45e: type = fn_type @AddWith.Op, @AddWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %AddAssignWith.type.133: type = facet_type <@AddAssignWith, @AddAssignWith(%C)> [concrete] // CHECK:STDOUT: %AddAssignWith.Op.type.5af: type = fn_type @AddAssignWith.Op, @AddAssignWith(%C) [concrete] // CHECK:STDOUT: %AddAssignWith.impl_witness: = impl_witness file.%AddAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [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.133 = facet_value %C, (%AddAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/operators/overloaded/bit_and.carbon b/toolchain/check/testdata/operators/overloaded/bit_and.carbon index 54c13305ef3f..72e9966f8b1a 100644 --- a/toolchain/check/testdata/operators/overloaded/bit_and.carbon +++ b/toolchain/check/testdata/operators/overloaded/bit_and.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %BitAndWith.type.488: type = facet_type <@BitAndWith, @BitAndWith(%C)> [concrete] // CHECK:STDOUT: %BitAndWith.Op.type.914: type = fn_type @BitAndWith.Op, @BitAndWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %BitAndAssignWith.type.bc6: type = facet_type <@BitAndAssignWith, @BitAndAssignWith(%C)> [concrete] // CHECK:STDOUT: %BitAndAssignWith.Op.type.73d: type = fn_type @BitAndAssignWith.Op, @BitAndAssignWith(%C) [concrete] // CHECK:STDOUT: %BitAndAssignWith.impl_witness: = impl_witness file.%BitAndAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.BitAndAssignWith.impl.Op.type: type = fn_type @C.as.BitAndAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.BitAndAssignWith.impl.Op: %C.as.BitAndAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %BitAndAssignWith.facet: %BitAndAssignWith.type.bc6 = facet_value %C, (%BitAndAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/operators/overloaded/bit_or.carbon b/toolchain/check/testdata/operators/overloaded/bit_or.carbon index 54a659c9b1f8..02ce1f7bd42d 100644 --- a/toolchain/check/testdata/operators/overloaded/bit_or.carbon +++ b/toolchain/check/testdata/operators/overloaded/bit_or.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %BitOrWith.type.499: type = facet_type <@BitOrWith, @BitOrWith(%C)> [concrete] // CHECK:STDOUT: %BitOrWith.Op.type.501: type = fn_type @BitOrWith.Op, @BitOrWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %BitOrAssignWith.type.de7: type = facet_type <@BitOrAssignWith, @BitOrAssignWith(%C)> [concrete] // CHECK:STDOUT: %BitOrAssignWith.Op.type.efc: type = fn_type @BitOrAssignWith.Op, @BitOrAssignWith(%C) [concrete] // CHECK:STDOUT: %BitOrAssignWith.impl_witness: = impl_witness file.%BitOrAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.BitOrAssignWith.impl.Op.type: type = fn_type @C.as.BitOrAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.BitOrAssignWith.impl.Op: %C.as.BitOrAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %BitOrAssignWith.facet: %BitOrAssignWith.type.de7 = facet_value %C, (%BitOrAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/operators/overloaded/bit_xor.carbon b/toolchain/check/testdata/operators/overloaded/bit_xor.carbon index c9f69615f809..00388ecb7307 100644 --- a/toolchain/check/testdata/operators/overloaded/bit_xor.carbon +++ b/toolchain/check/testdata/operators/overloaded/bit_xor.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %BitXorWith.type.bf8: type = facet_type <@BitXorWith, @BitXorWith(%C)> [concrete] // CHECK:STDOUT: %BitXorWith.Op.type.502: type = fn_type @BitXorWith.Op, @BitXorWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %BitXorAssignWith.type.38a: type = facet_type <@BitXorAssignWith, @BitXorAssignWith(%C)> [concrete] // CHECK:STDOUT: %BitXorAssignWith.Op.type.ad0: type = fn_type @BitXorAssignWith.Op, @BitXorAssignWith(%C) [concrete] // CHECK:STDOUT: %BitXorAssignWith.impl_witness: = impl_witness file.%BitXorAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.BitXorAssignWith.impl.Op.type: type = fn_type @C.as.BitXorAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.BitXorAssignWith.impl.Op: %C.as.BitXorAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %BitXorAssignWith.facet: %BitXorAssignWith.type.38a = facet_value %C, (%BitXorAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/operators/overloaded/dec.carbon b/toolchain/check/testdata/operators/overloaded/dec.carbon index ba8fa9af5f3e..4fef3942b408 100644 --- a/toolchain/check/testdata/operators/overloaded/dec.carbon +++ b/toolchain/check/testdata/operators/overloaded/dec.carbon @@ -33,12 +33,12 @@ fn TestOp() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Dec.type: type = facet_type <@Dec> [concrete] // CHECK:STDOUT: %Dec.Op.type: type = fn_type @Dec.Op [concrete] // CHECK:STDOUT: %Dec.impl_witness: = impl_witness file.%Dec.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.Dec.impl.Op.type: type = fn_type @C.as.Dec.impl.Op [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.as.Dec.impl.Op: %C.as.Dec.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %Dec.facet: %Dec.type = facet_value %C, (%Dec.impl_witness) [concrete] // CHECK:STDOUT: %.475: type = fn_type_with_self_type %Dec.Op.type, %Dec.facet [concrete] @@ -52,9 +52,9 @@ fn TestOp() { // CHECK:STDOUT: // CHECK:STDOUT: %c.ref: ref %C = name_ref c, %c // CHECK:STDOUT: %impl.elem0: %.475 = impl_witness_access constants.%Dec.impl_witness, element0 [concrete = constants.%C.as.Dec.impl.Op] -// CHECK:STDOUT: %bound_method: = bound_method %c.ref, %impl.elem0 +// CHECK:STDOUT: %bound_method.loc28: = bound_method %c.ref, %impl.elem0 // CHECK:STDOUT: %addr.loc28: %ptr.019 = addr_of %c.ref -// CHECK:STDOUT: %C.as.Dec.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr.loc28) +// CHECK:STDOUT: %C.as.Dec.impl.Op.call: init %empty_tuple.type = call %bound_method.loc28(%addr.loc28) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/operators/overloaded/div.carbon b/toolchain/check/testdata/operators/overloaded/div.carbon index 4360a6b75c90..bfed85993ebc 100644 --- a/toolchain/check/testdata/operators/overloaded/div.carbon +++ b/toolchain/check/testdata/operators/overloaded/div.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %DivWith.type.75d: type = facet_type <@DivWith, @DivWith(%C)> [concrete] // CHECK:STDOUT: %DivWith.Op.type.c4b: type = fn_type @DivWith.Op, @DivWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %DivAssignWith.type.226: type = facet_type <@DivAssignWith, @DivAssignWith(%C)> [concrete] // CHECK:STDOUT: %DivAssignWith.Op.type.629: type = fn_type @DivAssignWith.Op, @DivAssignWith(%C) [concrete] // CHECK:STDOUT: %DivAssignWith.impl_witness: = impl_witness file.%DivAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.DivAssignWith.impl.Op.type: type = fn_type @C.as.DivAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.DivAssignWith.impl.Op: %C.as.DivAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %DivAssignWith.facet: %DivAssignWith.type.226 = facet_value %C, (%DivAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/operators/overloaded/eq.carbon b/toolchain/check/testdata/operators/overloaded/eq.carbon index f9775940850c..3b5cc28a6d43 100644 --- a/toolchain/check/testdata/operators/overloaded/eq.carbon +++ b/toolchain/check/testdata/operators/overloaded/eq.carbon @@ -85,13 +85,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %EqWith.type.c2e: type = generic_interface_type @EqWith [concrete] @@ -119,13 +112,11 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .EqWith = %Core.EqWith // CHECK:STDOUT: .Bool = %Core.Bool // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.EqWith: %EqWith.type.c2e = import_ref Core//prelude/operators/comparison, EqWith, loaded [concrete = constants.%EqWith.generic] // CHECK:STDOUT: %Core.Bool: %Bool.type = import_ref Core//prelude/types/bool, Bool, loaded [concrete = constants.%Bool] // CHECK:STDOUT: } @@ -190,22 +181,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] @@ -256,10 +231,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -267,8 +238,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.EqWith.impl.Equal(%self.param: %C, %other.param: %C) -> bool; // CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.EqWith.impl.NotEqual(%self.param: %C, %other.param: %C) -> bool; @@ -297,13 +266,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.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: %pattern_type.510: type = pattern_type %D [concrete] @@ -320,13 +282,11 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Bool = %Core.Bool // CHECK:STDOUT: .EqWith = %Core.EqWith // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Bool: %Bool.type = import_ref Core//prelude/types/bool, Bool, loaded [concrete = constants.%Bool] // CHECK:STDOUT: %Core.EqWith: %EqWith.type.c2e = import_ref Core//prelude/operators/comparison, EqWith, loaded [concrete = constants.%EqWith.generic] // CHECK:STDOUT: } @@ -382,27 +342,7 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -410,8 +350,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @TestEqual(%a.param: %D, %b.param: %D) -> bool { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %D = name_ref a, %a @@ -430,21 +368,9 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %EqWith.type.c2e: type = generic_interface_type @EqWith [concrete] // CHECK:STDOUT: %EqWith.generic: %EqWith.type.c2e = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] @@ -466,13 +392,11 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .EqWith = %Core.EqWith // CHECK:STDOUT: .Bool = %Core.Bool // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.EqWith: %EqWith.type.c2e = import_ref Core//prelude/operators/comparison, EqWith, loaded [concrete = constants.%EqWith.generic] // CHECK:STDOUT: %Core.Bool: %Bool.type = import_ref Core//prelude/types/bool, Bool, loaded [concrete = constants.%Bool] // CHECK:STDOUT: } @@ -539,38 +463,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] @@ -621,10 +513,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -633,10 +521,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -644,10 +528,6 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.EqWith.impl.Equal(%self.param: %C, %other.param: %C) -> bool; // CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.EqWith.impl.NotEqual(%self.param: %C, %other.param: %C) -> bool; 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 f82d9539717a..786b5b58a65c 100644 --- a/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon +++ b/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon @@ -49,20 +49,16 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %Inc.type: type = facet_type <@Inc> [concrete] // CHECK:STDOUT: %Inc.Op.type: type = fn_type @Inc.Op [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %Inc.impl_witness: = impl_witness file.%Inc.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [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] // CHECK:STDOUT: %Inc.facet: %Inc.type = facet_value %C, (%Inc.impl_witness) [concrete] // CHECK:STDOUT: %AddAssignWith.type.fc6: type = generic_interface_type @AddAssignWith [concrete] @@ -84,13 +80,11 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Inc = %Core.Inc // CHECK:STDOUT: .AddAssignWith = %Core.AddAssignWith // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Inc: type = import_ref Core//prelude/operators/arithmetic, Inc, loaded [concrete = constants.%Inc.type] // CHECK:STDOUT: %Core.AddAssignWith: %AddAssignWith.type.fc6 = import_ref Core//prelude/operators/arithmetic, AddAssignWith, loaded [concrete = constants.%AddAssignWith.generic] // CHECK:STDOUT: } @@ -143,22 +137,6 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.44a = binding_pattern self [concrete] @@ -205,10 +183,6 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -216,8 +190,6 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.Inc.impl.Op(%self.param: %ptr.019); // CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.AddAssignWith.impl.Op(%self.param: %ptr.019, %other.param: %C); diff --git a/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon b/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon index 2ca32bf9ef02..473cd36fe78f 100644 --- a/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon +++ b/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon @@ -50,18 +50,11 @@ fn TestRef(b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %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: %TestBinary.type: type = fn_type @TestBinary [concrete] @@ -74,23 +67,30 @@ fn TestRef(b: C) { // CHECK:STDOUT: %AddAssignWith.type.fc6: type = generic_interface_type @AddAssignWith [concrete] // CHECK:STDOUT: %AddAssignWith.generic: %AddAssignWith.type.fc6 = struct_value () [concrete] // CHECK:STDOUT: %Inc.type: type = facet_type <@Inc> [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b80: %AggregateT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Negate = %Core.Negate // CHECK:STDOUT: .AddWith = %Core.AddWith // CHECK:STDOUT: .AddAssignWith = %Core.AddAssignWith // CHECK:STDOUT: .Inc = %Core.Inc +// 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/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Negate: type = import_ref Core//prelude/operators/arithmetic, Negate, loaded [concrete = constants.%Negate.type] // CHECK:STDOUT: %Core.AddWith: %AddWith.type.e05 = import_ref Core//prelude/operators/arithmetic, AddWith, loaded [concrete = constants.%AddWith.generic] // CHECK:STDOUT: %Core.AddAssignWith: %AddAssignWith.type.fc6 = import_ref Core//prelude/operators/arithmetic, AddAssignWith, loaded [concrete = constants.%AddAssignWith.generic] // CHECK:STDOUT: %Core.Inc: type = import_ref Core//prelude/operators/arithmetic, Inc, loaded [concrete = constants.%Inc.type] +// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -144,36 +144,14 @@ fn TestRef(b: C) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc17: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @TestUnary(%a.param: %C) -> %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %C = name_ref a, %a @@ -196,16 +174,20 @@ fn TestRef(b: C) { // CHECK:STDOUT: %a.var: ref %C = var %a.var_patt // CHECK:STDOUT: %.loc36_15.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc36_15.2: init %C = class_init (), %a.var [concrete = constants.%C.val] -// CHECK:STDOUT: %.loc36_3: init %C = converted %.loc36_15.1, %.loc36_15.2 [concrete = constants.%C.val] -// CHECK:STDOUT: assign %a.var, %.loc36_3 +// CHECK:STDOUT: %.loc36_3.1: init %C = converted %.loc36_15.1, %.loc36_15.2 [concrete = constants.%C.val] +// CHECK:STDOUT: assign %a.var, %.loc36_3.1 // CHECK:STDOUT: %C.ref.loc36: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: ref %C = bind_name a, %a.var // CHECK:STDOUT: %a.ref.loc41: ref %C = name_ref a, %a // CHECK:STDOUT: %b.ref: %C = name_ref b, %b // CHECK:STDOUT: %a.ref.loc46: ref %C = name_ref a, %a -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%C.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc36_3.2: %type_where = converted constants.%C, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %a.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.b80 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b80, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %a.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.019 = addr_of %a.var -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call: init %empty_tuple.type = call %C.as.Destroy.impl.Op.bound(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/operators/overloaded/implicit_as.carbon b/toolchain/check/testdata/operators/overloaded/implicit_as.carbon index b7c8b27f4bc8..593982728f06 100644 --- a/toolchain/check/testdata/operators/overloaded/implicit_as.carbon +++ b/toolchain/check/testdata/operators/overloaded/implicit_as.carbon @@ -48,13 +48,6 @@ fn Test() { // 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.elem: type = unbound_element_type %X, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.7d5: = impl_witness @X.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op.type: type = fn_type @X.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %X.as.Destroy.impl.Op: %X.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] @@ -102,23 +95,30 @@ fn Test() { // CHECK:STDOUT: %.6e6: type = fn_type_with_self_type %ImplicitAs.Convert.type.1b6, %ImplicitAs.facet.81e [concrete] // CHECK:STDOUT: %Source.specific_fn.cc7: = specific_function %Source, @Source(%i32) [concrete] // CHECK:STDOUT: %.c6c: type = fn_type_with_self_type %ImplicitAs.Convert.type.665, %ImplicitAs.facet.d14 [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %X, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.177: %AggregateT.as_type.as.Destroy.impl.Op.type.dc1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.177, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // 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.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type] // CHECK:STDOUT: %Core.import_ref.d0f6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.afd) = import_ref Core//prelude/parts/int, loc17_31, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.6cd)] // CHECK:STDOUT: %Copy.impl_witness_table.1ed = impl_witness_table (%Core.import_ref.d0f6), @Int.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 { @@ -185,22 +185,6 @@ fn Test() { // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @X.as.Destroy.impl: @X.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %X.as.Destroy.impl.Op.decl: %X.as.Destroy.impl.Op.type = fn_decl @X.as.Destroy.impl.Op [concrete = constants.%X.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.1c6 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.1c6 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.d17 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: %self: %ptr.d17 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %X.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @X.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.7ce = binding_pattern self [concrete] @@ -251,10 +235,6 @@ fn Test() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc16: %X.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] -// CHECK:STDOUT: impl_decl @X.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@X.as.Destroy.impl.%X.as.Destroy.impl.Op.decl), @X.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.7d5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -263,8 +243,6 @@ fn Test() { // CHECK:STDOUT: .n = %.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @X.as.Destroy.impl.Op(%self.param: %ptr.d17) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @i32.as.ImplicitAs.impl.Convert(%self.param: %i32) -> %return.param: %X { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %i32 = name_ref self, %self @@ -327,10 +305,10 @@ fn Test() { // CHECK:STDOUT: %.loc34_20.1: ref %X = temporary_storage // CHECK:STDOUT: %Source.call.loc34: init %X = call %Source.specific_fn.loc34() to %.loc34_20.1 // CHECK:STDOUT: %impl.elem0.loc34: %.6e6 = impl_witness_access constants.%ImplicitAs.impl_witness.cbe, element0 [concrete = constants.%X.as.ImplicitAs.impl.Convert] -// CHECK:STDOUT: %bound_method.loc34: = bound_method %Source.call.loc34, %impl.elem0.loc34 +// CHECK:STDOUT: %bound_method.loc34_20.1: = bound_method %Source.call.loc34, %impl.elem0.loc34 // CHECK:STDOUT: %.loc34_20.2: ref %X = temporary %.loc34_20.1, %Source.call.loc34 // CHECK:STDOUT: %.loc34_20.3: %X = bind_value %.loc34_20.2 -// CHECK:STDOUT: %X.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc34(%.loc34_20.3) +// CHECK:STDOUT: %X.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc34_20.1(%.loc34_20.3) // CHECK:STDOUT: %.loc34_20.4: %i32 = value_of_initializer %X.as.ImplicitAs.impl.Convert.call // CHECK:STDOUT: %.loc34_20.5: %i32 = converted %Source.call.loc34, %.loc34_20.4 // CHECK:STDOUT: %Sink_i32.call: init %empty_tuple.type = call %Sink_i32.ref(%.loc34_20.5) @@ -341,21 +319,29 @@ fn Test() { // CHECK:STDOUT: %Source.specific_fn.loc35: = specific_function %Source.ref.loc35, @Source(constants.%i32) [concrete = constants.%Source.specific_fn.cc7] // CHECK:STDOUT: %Source.call.loc35: init %i32 = call %Source.specific_fn.loc35() // CHECK:STDOUT: %impl.elem0.loc35: %.c6c = impl_witness_access constants.%ImplicitAs.impl_witness.8b6, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert] -// CHECK:STDOUT: %bound_method.loc35: = bound_method %Source.call.loc35, %impl.elem0.loc35 +// CHECK:STDOUT: %bound_method.loc35_20.1: = bound_method %Source.call.loc35, %impl.elem0.loc35 // CHECK:STDOUT: %.loc35_20.1: ref %X = temporary_storage // CHECK:STDOUT: %.loc35_20.2: %i32 = value_of_initializer %Source.call.loc35 // CHECK:STDOUT: %.loc35_20.3: %i32 = converted %Source.call.loc35, %.loc35_20.2 -// CHECK:STDOUT: %i32.as.ImplicitAs.impl.Convert.call: init %X = call %bound_method.loc35(%.loc35_20.3) to %.loc35_20.1 +// CHECK:STDOUT: %i32.as.ImplicitAs.impl.Convert.call: init %X = call %bound_method.loc35_20.1(%.loc35_20.3) to %.loc35_20.1 // CHECK:STDOUT: %.loc35_20.4: init %X = converted %Source.call.loc35, %i32.as.ImplicitAs.impl.Convert.call // CHECK:STDOUT: %.loc35_20.5: ref %X = temporary %.loc35_20.1, %.loc35_20.4 // CHECK:STDOUT: %.loc35_20.6: %X = bind_value %.loc35_20.5 // CHECK:STDOUT: %Sink_X.call: init %empty_tuple.type = call %Sink_X.ref(%.loc35_20.6) -// CHECK:STDOUT: %X.as.Destroy.impl.Op.bound.loc35: = bound_method %.loc35_20.5, constants.%X.as.Destroy.impl.Op +// CHECK:STDOUT: %facet_value.loc35: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc35_20.7: %type_where = converted constants.%X, %facet_value.loc35 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc35: = bound_method %.loc35_20.5, constants.%AggregateT.as_type.as.Destroy.impl.Op.177 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.177, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc35_20.2: = bound_method %.loc35_20.5, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc35: %ptr.d17 = addr_of %.loc35_20.5 -// CHECK:STDOUT: %X.as.Destroy.impl.Op.call.loc35: init %empty_tuple.type = call %X.as.Destroy.impl.Op.bound.loc35(%addr.loc35) -// CHECK:STDOUT: %X.as.Destroy.impl.Op.bound.loc34: = bound_method %.loc34_20.2, constants.%X.as.Destroy.impl.Op +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc35: init %empty_tuple.type = call %bound_method.loc35_20.2(%addr.loc35) +// CHECK:STDOUT: %facet_value.loc34: %type_where = facet_value constants.%X, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc34_20.6: %type_where = converted constants.%X, %facet_value.loc34 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc34: = bound_method %.loc34_20.2, constants.%AggregateT.as_type.as.Destroy.impl.Op.177 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.177, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc34_20.2: = bound_method %.loc34_20.2, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc34: %ptr.d17 = addr_of %.loc34_20.2 -// CHECK:STDOUT: %X.as.Destroy.impl.Op.call.loc34: init %empty_tuple.type = call %X.as.Destroy.impl.Op.bound.loc34(%addr.loc34) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc34: init %empty_tuple.type = call %bound_method.loc34_20.2(%addr.loc34) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/operators/overloaded/inc.carbon b/toolchain/check/testdata/operators/overloaded/inc.carbon index 54c30e6dbd53..18093725fad7 100644 --- a/toolchain/check/testdata/operators/overloaded/inc.carbon +++ b/toolchain/check/testdata/operators/overloaded/inc.carbon @@ -33,12 +33,12 @@ fn TestOp() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Inc.type: type = facet_type <@Inc> [concrete] // CHECK:STDOUT: %Inc.Op.type: type = fn_type @Inc.Op [concrete] // CHECK:STDOUT: %Inc.impl_witness: = impl_witness file.%Inc.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [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] // CHECK:STDOUT: %Inc.facet: %Inc.type = facet_value %C, (%Inc.impl_witness) [concrete] // CHECK:STDOUT: %.35f: type = fn_type_with_self_type %Inc.Op.type, %Inc.facet [concrete] @@ -52,9 +52,9 @@ fn TestOp() { // CHECK:STDOUT: // CHECK:STDOUT: %c.ref: ref %C = name_ref c, %c // CHECK:STDOUT: %impl.elem0: %.35f = impl_witness_access constants.%Inc.impl_witness, element0 [concrete = constants.%C.as.Inc.impl.Op] -// CHECK:STDOUT: %bound_method: = bound_method %c.ref, %impl.elem0 +// CHECK:STDOUT: %bound_method.loc28: = bound_method %c.ref, %impl.elem0 // CHECK:STDOUT: %addr.loc28: %ptr.019 = addr_of %c.ref -// CHECK:STDOUT: %C.as.Inc.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr.loc28) +// CHECK:STDOUT: %C.as.Inc.impl.Op.call: init %empty_tuple.type = call %bound_method.loc28(%addr.loc28) // CHECK:STDOUT: // 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 57c0da3a18ee..15b5d8b7e869 100644 --- a/toolchain/check/testdata/operators/overloaded/index_with_prelude.carbon +++ b/toolchain/check/testdata/operators/overloaded/index_with_prelude.carbon @@ -85,27 +85,10 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %ElementType.e6b: type = class_type @ElementType [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c69: = impl_witness @ElementType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e72: type = ptr_type %ElementType.e6b [concrete] -// CHECK:STDOUT: %pattern_type.b78: type = pattern_type %ptr.e72 [concrete] -// CHECK:STDOUT: %ElementType.as.Destroy.impl.Op.type: type = fn_type @ElementType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ElementType.as.Destroy.impl.Op: %ElementType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %SubscriptType.8ee: type = class_type @SubscriptType [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d5e: = impl_witness @SubscriptType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.627: type = ptr_type %SubscriptType.8ee [concrete] -// CHECK:STDOUT: %pattern_type.17d: type = pattern_type %ptr.627 [concrete] -// CHECK:STDOUT: %SubscriptType.as.Destroy.impl.Op.type: type = fn_type @SubscriptType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SubscriptType.as.Destroy.impl.Op: %SubscriptType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.type.504: type = generic_interface_type @IndexWith [concrete] // CHECK:STDOUT: %IndexWith.generic: %IndexWith.type.504 = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.type.191: type = facet_type <@IndexWith, @IndexWith(%SubscriptType.8ee, %ElementType.e6b)> [concrete] @@ -125,12 +108,10 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .IndexWith = %Core.IndexWith // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.IndexWith: %IndexWith.type.504 = import_ref Core//prelude/operators/index, IndexWith, loaded [concrete = constants.%IndexWith.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -187,54 +168,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: %x: %ElementType.e6b = bind_name x, %.loc16_25.2 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @ElementType.as.Destroy.impl: @ElementType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %ElementType.as.Destroy.impl.Op.decl: %ElementType.as.Destroy.impl.Op.type = fn_decl @ElementType.as.Destroy.impl.Op [concrete = constants.%ElementType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.b78 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.b78 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e72 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ElementType.e6b [concrete = constants.%ElementType.e6b] -// CHECK:STDOUT: %self: %ptr.e72 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %ElementType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @ElementType.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @SubscriptType.as.Destroy.impl: @SubscriptType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SubscriptType.as.Destroy.impl.Op.decl: %SubscriptType.as.Destroy.impl.Op.type = fn_decl @SubscriptType.as.Destroy.impl.Op [concrete = constants.%SubscriptType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.17d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.17d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.627 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SubscriptType.8ee [concrete = constants.%SubscriptType.8ee] -// CHECK:STDOUT: %self: %ptr.627 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SubscriptType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SubscriptType.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] @@ -263,10 +196,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -275,10 +204,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @ElementType { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ElementType.e6b [concrete = constants.%ElementType.e6b] -// CHECK:STDOUT: impl_decl @ElementType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@ElementType.as.Destroy.impl.%ElementType.as.Destroy.impl.Op.decl), @ElementType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c69] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -287,10 +212,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @SubscriptType { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SubscriptType.8ee [concrete = constants.%SubscriptType.8ee] -// CHECK:STDOUT: impl_decl @SubscriptType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SubscriptType.as.Destroy.impl.%SubscriptType.as.Destroy.impl.Op.decl), @SubscriptType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d5e] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -298,12 +219,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: .Self = constants.%SubscriptType.8ee // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @ElementType.as.Destroy.impl.Op(%self.param: %ptr.e72) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @SubscriptType.as.Destroy.impl.Op(%self.param: %ptr.627) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.IndexWith.impl.At(%self.param: %C, %subscript.param: %SubscriptType.8ee) -> %return.param: %ElementType.e6b { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc10_13.1: %empty_struct_type = struct_literal () @@ -534,27 +449,10 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %ElementType.e6b: type = class_type @ElementType [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c69: = impl_witness @ElementType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.e72: type = ptr_type %ElementType.e6b [concrete] -// CHECK:STDOUT: %pattern_type.b78: type = pattern_type %ptr.e72 [concrete] -// CHECK:STDOUT: %ElementType.as.Destroy.impl.Op.type: type = fn_type @ElementType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %ElementType.as.Destroy.impl.Op: %ElementType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %SubscriptType.8ee: type = class_type @SubscriptType [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.d5e: = impl_witness @SubscriptType.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.627: type = ptr_type %SubscriptType.8ee [concrete] -// CHECK:STDOUT: %pattern_type.17d: type = pattern_type %ptr.627 [concrete] -// CHECK:STDOUT: %SubscriptType.as.Destroy.impl.Op.type: type = fn_type @SubscriptType.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %SubscriptType.as.Destroy.impl.Op: %SubscriptType.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.type.504: type = generic_interface_type @IndexWith [concrete] // CHECK:STDOUT: %IndexWith.generic: %IndexWith.type.504 = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.type.191: type = facet_type <@IndexWith, @IndexWith(%SubscriptType.8ee, %ElementType.e6b)> [concrete] @@ -576,13 +474,11 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .IndexWith = %Core.IndexWith // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.IndexWith: %IndexWith.type.504 = import_ref Core//prelude/operators/index, IndexWith, loaded [concrete = constants.%IndexWith.generic] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/operators/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } @@ -629,54 +525,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: %x: %ElementType.e6b = bind_name x, %.loc22_25.2 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @ElementType.as.Destroy.impl: @ElementType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %ElementType.as.Destroy.impl.Op.decl: %ElementType.as.Destroy.impl.Op.type = fn_decl @ElementType.as.Destroy.impl.Op [concrete = constants.%ElementType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.b78 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.b78 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.e72 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ElementType.e6b [concrete = constants.%ElementType.e6b] -// CHECK:STDOUT: %self: %ptr.e72 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %ElementType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @ElementType.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @SubscriptType.as.Destroy.impl: @SubscriptType.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %SubscriptType.as.Destroy.impl.Op.decl: %SubscriptType.as.Destroy.impl.Op.type = fn_decl @SubscriptType.as.Destroy.impl.Op [concrete = constants.%SubscriptType.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.17d = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.17d = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.627 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SubscriptType.8ee [concrete = constants.%SubscriptType.8ee] -// CHECK:STDOUT: %self: %ptr.627 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %SubscriptType.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @SubscriptType.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] @@ -705,10 +553,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -717,10 +561,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @ElementType { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ElementType.e6b [concrete = constants.%ElementType.e6b] -// CHECK:STDOUT: impl_decl @ElementType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@ElementType.as.Destroy.impl.%ElementType.as.Destroy.impl.Op.decl), @ElementType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.c69] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -729,10 +569,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @SubscriptType { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SubscriptType.8ee [concrete = constants.%SubscriptType.8ee] -// CHECK:STDOUT: impl_decl @SubscriptType.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@SubscriptType.as.Destroy.impl.%SubscriptType.as.Destroy.impl.Op.decl), @SubscriptType.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.d5e] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -740,12 +576,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: .Self = constants.%SubscriptType.8ee // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @ElementType.as.Destroy.impl.Op(%self.param: %ptr.e72) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @SubscriptType.as.Destroy.impl.Op(%self.param: %ptr.627) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.IndexWith.impl.At(%self.param: %C, %subscript.param: %SubscriptType.8ee) -> %return.param: %ElementType.e6b { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc10_13.1: %empty_struct_type = struct_literal () @@ -771,13 +601,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %pattern_type.c48: type = pattern_type %C [concrete] @@ -794,13 +617,11 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Int = %Core.Int // CHECK:STDOUT: .IndexWith = %Core.IndexWith // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/types/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %Core.IndexWith: %IndexWith.type.504 = import_ref Core//prelude/operators/index, IndexWith, loaded [concrete = constants.%IndexWith.generic] // CHECK:STDOUT: } @@ -834,27 +655,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %x: %i32 = bind_name x, [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -862,8 +663,6 @@ let x: i32 = c[0]; // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc6: %empty_struct_type = struct_literal () diff --git a/toolchain/check/testdata/operators/overloaded/left_shift.carbon b/toolchain/check/testdata/operators/overloaded/left_shift.carbon index ad610df8d49a..86476e56f070 100644 --- a/toolchain/check/testdata/operators/overloaded/left_shift.carbon +++ b/toolchain/check/testdata/operators/overloaded/left_shift.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %LeftShiftWith.type.dad: type = facet_type <@LeftShiftWith, @LeftShiftWith(%C)> [concrete] // CHECK:STDOUT: %LeftShiftWith.Op.type.097: type = fn_type @LeftShiftWith.Op, @LeftShiftWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %LeftShiftAssignWith.type.981: type = facet_type <@LeftShiftAssignWith, @LeftShiftAssignWith(%C)> [concrete] // CHECK:STDOUT: %LeftShiftAssignWith.Op.type.30f: type = fn_type @LeftShiftAssignWith.Op, @LeftShiftAssignWith(%C) [concrete] // CHECK:STDOUT: %LeftShiftAssignWith.impl_witness: = impl_witness file.%LeftShiftAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.LeftShiftAssignWith.impl.Op.type: type = fn_type @C.as.LeftShiftAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.LeftShiftAssignWith.impl.Op: %C.as.LeftShiftAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %LeftShiftAssignWith.facet: %LeftShiftAssignWith.type.981 = facet_value %C, (%LeftShiftAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/operators/overloaded/mod.carbon b/toolchain/check/testdata/operators/overloaded/mod.carbon index c801c24b91ee..23960b5f980e 100644 --- a/toolchain/check/testdata/operators/overloaded/mod.carbon +++ b/toolchain/check/testdata/operators/overloaded/mod.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ModWith.type.a0d: type = facet_type <@ModWith, @ModWith(%C)> [concrete] // CHECK:STDOUT: %ModWith.Op.type.140: type = fn_type @ModWith.Op, @ModWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %ModAssignWith.type.444: type = facet_type <@ModAssignWith, @ModAssignWith(%C)> [concrete] // CHECK:STDOUT: %ModAssignWith.Op.type.dd0: type = fn_type @ModAssignWith.Op, @ModAssignWith(%C) [concrete] // CHECK:STDOUT: %ModAssignWith.impl_witness: = impl_witness file.%ModAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.ModAssignWith.impl.Op.type: type = fn_type @C.as.ModAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.ModAssignWith.impl.Op: %C.as.ModAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %ModAssignWith.facet: %ModAssignWith.type.444 = facet_value %C, (%ModAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/operators/overloaded/mul.carbon b/toolchain/check/testdata/operators/overloaded/mul.carbon index 0d666788041c..2f43fd6e9073 100644 --- a/toolchain/check/testdata/operators/overloaded/mul.carbon +++ b/toolchain/check/testdata/operators/overloaded/mul.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %MulWith.type.c1e: type = facet_type <@MulWith, @MulWith(%C)> [concrete] // CHECK:STDOUT: %MulWith.Op.type.2c9: type = fn_type @MulWith.Op, @MulWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %MulAssignWith.type.c63: type = facet_type <@MulAssignWith, @MulAssignWith(%C)> [concrete] // CHECK:STDOUT: %MulAssignWith.Op.type.5c8: type = fn_type @MulAssignWith.Op, @MulAssignWith(%C) [concrete] // CHECK:STDOUT: %MulAssignWith.impl_witness: = impl_witness file.%MulAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.MulAssignWith.impl.Op.type: type = fn_type @C.as.MulAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.MulAssignWith.impl.Op: %C.as.MulAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %MulAssignWith.facet: %MulAssignWith.type.c63 = facet_value %C, (%MulAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/operators/overloaded/ordered.carbon b/toolchain/check/testdata/operators/overloaded/ordered.carbon index a737bf2f0430..d33081c1fbd3 100644 --- a/toolchain/check/testdata/operators/overloaded/ordered.carbon +++ b/toolchain/check/testdata/operators/overloaded/ordered.carbon @@ -83,13 +83,6 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %OrderedWith.type.270: type = generic_interface_type @OrderedWith [concrete] @@ -129,13 +122,11 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .OrderedWith = %Core.OrderedWith // CHECK:STDOUT: .Bool = %Core.Bool // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.OrderedWith: %OrderedWith.type.270 = import_ref Core//prelude/operators/comparison, OrderedWith, loaded [concrete = constants.%OrderedWith.generic] // CHECK:STDOUT: %Core.Bool: %Bool.type = import_ref Core//prelude/types/bool, Bool, loaded [concrete = constants.%Bool] // CHECK:STDOUT: } @@ -242,22 +233,6 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] @@ -350,10 +325,6 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -361,8 +332,6 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.OrderedWith.impl.Less(%self.param: %C, %other.param: %C) -> bool; // CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.OrderedWith.impl.LessOrEquivalent(%self.param: %C, %other.param: %C) -> bool; @@ -415,13 +384,6 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.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: %pattern_type.510: type = pattern_type %D [concrete] @@ -442,13 +404,11 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .Bool = %Core.Bool // CHECK:STDOUT: .OrderedWith = %Core.OrderedWith // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.Bool: %Bool.type = import_ref Core//prelude/types/bool, Bool, loaded [concrete = constants.%Bool] // CHECK:STDOUT: %Core.OrderedWith: %OrderedWith.type.270 = import_ref Core//prelude/operators/comparison, OrderedWith, loaded [concrete = constants.%OrderedWith.generic] // CHECK:STDOUT: } @@ -546,27 +506,7 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -574,8 +514,6 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @TestLess(%a.param: %D, %b.param: %D) -> bool { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %D = name_ref a, %a diff --git a/toolchain/check/testdata/operators/overloaded/right_shift.carbon b/toolchain/check/testdata/operators/overloaded/right_shift.carbon index 9160688b09e0..de29b44a34f9 100644 --- a/toolchain/check/testdata/operators/overloaded/right_shift.carbon +++ b/toolchain/check/testdata/operators/overloaded/right_shift.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %RightShiftWith.type.a33: type = facet_type <@RightShiftWith, @RightShiftWith(%C)> [concrete] // CHECK:STDOUT: %RightShiftWith.Op.type.19b: type = fn_type @RightShiftWith.Op, @RightShiftWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %RightShiftAssignWith.type.df5: type = facet_type <@RightShiftAssignWith, @RightShiftAssignWith(%C)> [concrete] // CHECK:STDOUT: %RightShiftAssignWith.Op.type.ae9: type = fn_type @RightShiftAssignWith.Op, @RightShiftAssignWith(%C) [concrete] // CHECK:STDOUT: %RightShiftAssignWith.impl_witness: = impl_witness file.%RightShiftAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.RightShiftAssignWith.impl.Op.type: type = fn_type @C.as.RightShiftAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.RightShiftAssignWith.impl.Op: %C.as.RightShiftAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %RightShiftAssignWith.facet: %RightShiftAssignWith.type.df5 = facet_value %C, (%RightShiftAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/operators/overloaded/sub.carbon b/toolchain/check/testdata/operators/overloaded/sub.carbon index 75eb0c747e24..a2c3b14151c5 100644 --- a/toolchain/check/testdata/operators/overloaded/sub.carbon +++ b/toolchain/check/testdata/operators/overloaded/sub.carbon @@ -43,7 +43,6 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %SubWith.type.c5d: type = facet_type <@SubWith, @SubWith(%C)> [concrete] // CHECK:STDOUT: %SubWith.Op.type.fc0: type = fn_type @SubWith.Op, @SubWith(%C) [concrete] @@ -54,6 +53,7 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %SubAssignWith.type.9f4: type = facet_type <@SubAssignWith, @SubAssignWith(%C)> [concrete] // CHECK:STDOUT: %SubAssignWith.Op.type.ffe: type = fn_type @SubAssignWith.Op, @SubAssignWith(%C) [concrete] // CHECK:STDOUT: %SubAssignWith.impl_witness: = impl_witness file.%SubAssignWith.impl_witness_table [concrete] +// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.as.SubAssignWith.impl.Op.type: type = fn_type @C.as.SubAssignWith.impl.Op [concrete] // CHECK:STDOUT: %C.as.SubAssignWith.impl.Op: %C.as.SubAssignWith.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %SubAssignWith.facet: %SubAssignWith.type.9f4 = facet_value %C, (%SubAssignWith.impl_witness) [concrete] diff --git a/toolchain/check/testdata/package_expr/fail_not_found.carbon b/toolchain/check/testdata/package_expr/fail_not_found.carbon index 24bbb955333e..ec4e78c7d42f 100644 --- a/toolchain/check/testdata/package_expr/fail_not_found.carbon +++ b/toolchain/check/testdata/package_expr/fail_not_found.carbon @@ -32,10 +32,12 @@ fn Main() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -69,16 +71,18 @@ fn Main() { // CHECK:STDOUT: %package.ref: = name_ref package, package [concrete = package] // CHECK:STDOUT: %x.ref: = name_ref x, [concrete = ] // CHECK:STDOUT: assign %y.var, -// CHECK:STDOUT: %.loc20: type = splice_block %i32 [concrete = constants.%i32] { +// CHECK:STDOUT: %.loc20_10: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %y: ref %i32 = bind_name y, %y.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %y.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method: = bound_method %y.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc20_3: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %y.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method: = bound_method %y.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.235 = addr_of %y.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/package_expr/syntax.carbon b/toolchain/check/testdata/package_expr/syntax.carbon index e47167d68ffb..e456ff9ee4f1 100644 --- a/toolchain/check/testdata/package_expr/syntax.carbon +++ b/toolchain/check/testdata/package_expr/syntax.carbon @@ -195,10 +195,12 @@ fn Main() { // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -253,8 +255,8 @@ fn Main() { // CHECK:STDOUT: %specific_fn.loc7: = specific_function %impl.elem0.loc7, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc7_3.2: = bound_method %int_1, %specific_fn.loc7 [concrete = constants.%bound_method.c11] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc7_3.2(%int_1) [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: %.loc7_3: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: assign %x.var, %.loc7_3 +// CHECK:STDOUT: %.loc7_3.1: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.5d2] +// CHECK:STDOUT: assign %x.var, %.loc7_3.1 // CHECK:STDOUT: %.loc7_10: type = splice_block %i32.loc7 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc7: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc7: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -279,16 +281,20 @@ fn Main() { // CHECK:STDOUT: %i32.loc9: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %y: ref %i32 = bind_name y, %y.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc9: = bound_method %y.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_3: = bound_method %y.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc9: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc9_3: %type_where = converted constants.%i32, %facet_value.loc9 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc9: = bound_method %y.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc9_3: = bound_method %y.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc9: %ptr.235 = addr_of %y.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc9: init %empty_tuple.type = call %bound_method.loc9_3(%addr.loc9) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc7: = bound_method %x.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc7_3.3: = bound_method %x.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc9: init %empty_tuple.type = call %bound_method.loc9_3(%addr.loc9) +// CHECK:STDOUT: %facet_value.loc7: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc7_3.2: %type_where = converted constants.%i32, %facet_value.loc7 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7: = bound_method %x.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc7_3.3: = bound_method %x.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc7: %ptr.235 = addr_of %x.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc7: init %empty_tuple.type = call %bound_method.loc7_3.3(%addr.loc7) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7: init %empty_tuple.type = call %bound_method.loc7_3.3(%addr.loc7) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -312,13 +318,6 @@ fn Main() { // CHECK:STDOUT: %C.Foo.type: type = fn_type @C.Foo [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.Foo: %C.Foo.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.691: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.c45: type = pattern_type %ptr.691 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: %Main.type: type = fn_type @Main [concrete] @@ -327,11 +326,9 @@ fn Main() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -348,28 +345,8 @@ fn Main() { // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.c45 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.c45 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc6: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.691 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.691 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %C.Foo.decl: %C.Foo.type = fn_decl @C.Foo [concrete = constants.%C.Foo] {} {} -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -383,8 +360,6 @@ fn Main() { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.691) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %package.ref: = name_ref package, package [concrete = package] diff --git a/toolchain/check/testdata/packages/raw_core.carbon b/toolchain/check/testdata/packages/raw_core.carbon index c0598e660fff..fb8fa0816e9b 100644 --- a/toolchain/check/testdata/packages/raw_core.carbon +++ b/toolchain/check/testdata/packages/raw_core.carbon @@ -201,13 +201,6 @@ var c: r#Core = {.n = 0 as Core.Int(32)}; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Core.elem: type = unbound_element_type %Core, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @Core.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.4bf: type = ptr_type %Core [concrete] -// CHECK:STDOUT: %pattern_type.c58: type = pattern_type %ptr.4bf [concrete] -// CHECK:STDOUT: %Core.as.Destroy.impl.Op.type: type = fn_type @Core.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %Core.as.Destroy.impl.Op: %Core.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %pattern_type.c8a: type = pattern_type %Core [concrete] @@ -247,14 +240,12 @@ var c: r#Core = {.n = 0 as Core.Int(32)}; // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .As = %Core.As // CHECK:STDOUT: .Copy = %Core.Copy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.As: %As.type.90f = import_ref Core//prelude/parts/as, As, loaded [concrete = constants.%As.generic] // CHECK:STDOUT: %Core.import_ref.99c: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.565) = import_ref Core//prelude/parts/int, loc32_39, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.d2c)] // CHECK:STDOUT: %As.impl_witness_table.5ad = impl_witness_table (%Core.import_ref.99c), @Core.IntLiteral.as.As.impl [concrete] @@ -280,32 +271,12 @@ var c: r#Core = {.n = 0 as Core.Int(32)}; // CHECK:STDOUT: %c: ref %Core = bind_name c, %c.var [concrete = %c.var] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @Core.as.Destroy.impl: @Core.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %Core.as.Destroy.impl.Op.decl: %Core.as.Destroy.impl.Op.type = fn_decl @Core.as.Destroy.impl.Op [concrete = constants.%Core.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.c58 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.c58 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc2: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.4bf = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Core [concrete = constants.%Core] -// CHECK:STDOUT: %self: %ptr.4bf = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %Core.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @Core.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @Core { // 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] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc3: %Core.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Core [concrete = constants.%Core] -// CHECK:STDOUT: impl_decl @Core.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@Core.as.Destroy.impl.%Core.as.Destroy.impl.Op.decl), @Core.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -314,8 +285,6 @@ var c: r#Core = {.n = 0 as Core.Int(32)}; // CHECK:STDOUT: .n = %.loc3 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Core.as.Destroy.impl.Op(%self.param: %ptr.4bf) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/pointer/address_of_deref.carbon b/toolchain/check/testdata/pointer/address_of_deref.carbon index 03ac496e2af9..1a287ad68d94 100644 --- a/toolchain/check/testdata/pointer/address_of_deref.carbon +++ b/toolchain/check/testdata/pointer/address_of_deref.carbon @@ -58,9 +58,11 @@ fn F() -> i32 { // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -112,8 +114,8 @@ fn F() -> i32 { // 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] // CHECK:STDOUT: %bound_method.loc16_3.2: = bound_method %int_0, %specific_fn.loc16 [concrete = constants.%bound_method] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc16_3.2(%int_0) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc16_3: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %n.var, %.loc16_3 +// CHECK:STDOUT: %.loc16_3.1: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %n.var, %.loc16_3.1 // CHECK:STDOUT: %.loc16_10: type = splice_block %i32.loc16 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -130,11 +132,13 @@ fn F() -> i32 { // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc17_10.2: = bound_method %.loc17_10.2, %specific_fn.loc17 // CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc17_10.2(%.loc17_10.2) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %n.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc16_3.3: = bound_method %n.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc16_3.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %n.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc16_3.3: = bound_method %n.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc16: %ptr.235 = addr_of %n.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc16_3.3(%addr.loc16) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc16_3.3(%addr.loc16) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/pointer/arrow.carbon b/toolchain/check/testdata/pointer/arrow.carbon index 3b38309001fd..9f1107e86ac3 100644 --- a/toolchain/check/testdata/pointer/arrow.carbon +++ b/toolchain/check/testdata/pointer/arrow.carbon @@ -37,25 +37,18 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: %C.Member: %C.Member.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %ptr.019 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.field: type = struct_type {.field: %ptr.019} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.field [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -79,22 +72,6 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] @@ -107,10 +84,6 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %ptr: type = ptr_type %C.ref [concrete = constants.%ptr.019] // CHECK:STDOUT: %.loc17: %C.elem = field_decl field, element0 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.field [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -123,8 +96,6 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: // CHECK:STDOUT: fn @C.Member(%self.param: %C); // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Foo(%ptr.param: %ptr.019) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %ptr.ref.loc21: %ptr.019 = name_ref ptr, %ptr.loc20_8 diff --git a/toolchain/check/testdata/pointer/basic.carbon b/toolchain/check/testdata/pointer/basic.carbon index 7f573c894cce..9abdb38306a8 100644 --- a/toolchain/check/testdata/pointer/basic.carbon +++ b/toolchain/check/testdata/pointer/basic.carbon @@ -70,13 +70,15 @@ fn F() -> i32 { // CHECK:STDOUT: %.7fa: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.c49 [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.f59, @Int.as.Copy.impl.Op(%int_32) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.type.142: type = fn_type @ptr.as.Destroy.impl.Op, @ptr.as.Destroy.impl(%i32) [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.c04: %ptr.as.Destroy.impl.Op.type.142 = struct_value () [concrete] // CHECK:STDOUT: %ptr.5d5: type = ptr_type %ptr.235 [concrete] // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.specific_fn: = specific_function %ptr.as.Destroy.impl.Op.c04, @ptr.as.Destroy.impl.Op(%i32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -130,8 +132,8 @@ fn F() -> i32 { // 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] // CHECK:STDOUT: %bound_method.loc16_3.2: = bound_method %int_0, %specific_fn.loc16 [concrete = constants.%bound_method] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc16_3.2(%int_0) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc16_3: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %n.var, %.loc16_3 +// CHECK:STDOUT: %.loc16_3.1: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %n.var, %.loc16_3.1 // CHECK:STDOUT: %.loc16_10: type = splice_block %i32.loc16 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -170,11 +172,13 @@ fn F() -> i32 { // CHECK:STDOUT: %bound_method.loc17_3: = bound_method %p.var, %ptr.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc17_3: %ptr.5d5 = addr_of %p.var // CHECK:STDOUT: %ptr.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc17_3(%addr.loc17_3) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %n.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc16_3.3: = bound_method %n.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc16_3.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %n.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc16_3.3: = bound_method %n.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr.loc16: %ptr.235 = addr_of %n.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc16_3.3(%addr.loc16) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc16_3.3(%addr.loc16) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/pointer/convert_qualifiers.carbon b/toolchain/check/testdata/pointer/convert_qualifiers.carbon index fa50fff4b9f3..6d03ce09b40a 100644 --- a/toolchain/check/testdata/pointer/convert_qualifiers.carbon +++ b/toolchain/check/testdata/pointer/convert_qualifiers.carbon @@ -125,12 +125,12 @@ fn NonConstNonConst(p: X**) { TakeNonConstConst(p); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %const.dde: type = const_type %X [concrete] // CHECK:STDOUT: %ptr.cbd: type = ptr_type %const.dde [concrete] // CHECK:STDOUT: %TakeConst.type: type = fn_type @TakeConst [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TakeConst: %TakeConst.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] // CHECK:STDOUT: %TakeNonConst.type: type = fn_type @TakeNonConst [concrete] // CHECK:STDOUT: %TakeNonConst: %TakeNonConst.type = struct_value () [concrete] // CHECK:STDOUT: %const.5df: type = const_type %ptr.cbd [concrete] @@ -178,14 +178,14 @@ fn NonConstNonConst(p: X**) { TakeNonConstConst(p); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %const.dde: type = const_type %X [concrete] // CHECK:STDOUT: %ptr.cbd: type = ptr_type %const.dde [concrete] // CHECK:STDOUT: %const.5df: type = const_type %ptr.cbd [concrete] // CHECK:STDOUT: %ptr.20a: type = ptr_type %const.5df [concrete] // CHECK:STDOUT: %TakeConstConst.type: type = fn_type @TakeConstConst [concrete] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TakeConstConst: %TakeConstConst.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] // CHECK:STDOUT: %ptr.b1b: type = ptr_type %ptr.d17 [concrete] // CHECK:STDOUT: %const.2bc: type = const_type %ptr.d17 [concrete] // CHECK:STDOUT: %ptr.297: type = ptr_type %const.2bc [concrete] 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 3b5146aa2baa..d85fdf5b7524 100644 --- a/toolchain/check/testdata/return/fail_return_with_returned_var.carbon +++ b/toolchain/check/testdata/return/fail_return_with_returned_var.carbon @@ -67,18 +67,14 @@ fn G() -> C { // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] @@ -138,22 +134,6 @@ fn G() -> C { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc27: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %int_32.loc27_18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc27_18: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -161,10 +141,6 @@ fn G() -> C { // CHECK:STDOUT: %int_32.loc27_30: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc27_30: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc27_28: %C.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.501 [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -187,24 +163,24 @@ fn G() -> C { // 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] // CHECK:STDOUT: %bound_method.loc16_12.2: = bound_method %int_0, %specific_fn [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc16_12.2(%int_0) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc16_12: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %v.var, %.loc16_12 +// CHECK:STDOUT: %.loc16_12.1: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %v.var, %.loc16_12.1 // CHECK:STDOUT: %.loc16_19: type = splice_block %i32.loc16 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %i32 = bind_name v, %v.var // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc16_12.3: = bound_method %v.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc16_12.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc16_12.3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.235 = addr_of %v.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc16_12.3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc16_12.3(%addr) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @G() -> %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { diff --git a/toolchain/check/testdata/return/fail_returned_var_shadow.carbon b/toolchain/check/testdata/return/fail_returned_var_shadow.carbon index dde0067d94d4..c0ceb2294015 100644 --- a/toolchain/check/testdata/return/fail_returned_var_shadow.carbon +++ b/toolchain/check/testdata/return/fail_returned_var_shadow.carbon @@ -78,10 +78,12 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %bound_method.c11: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: %DifferentScopes.type: type = fn_type @DifferentScopes [concrete] // CHECK:STDOUT: %DifferentScopes: %DifferentScopes.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -145,8 +147,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc17_14.2: = bound_method %int_0.loc17, %specific_fn.loc17 [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc17: init %i32 = call %bound_method.loc17_14.2(%int_0.loc17) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc17_14: init %i32 = converted %int_0.loc17, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc17 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %v.var, %.loc17_14 +// CHECK:STDOUT: %.loc17_14.1: init %i32 = converted %int_0.loc17, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc17 [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %v.var, %.loc17_14.1 // CHECK:STDOUT: %.loc17_21: type = splice_block %i32.loc17 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -163,8 +165,8 @@ fn DifferentScopes() -> i32 { // 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] // CHECK:STDOUT: %bound_method.loc25_14.2: = bound_method %int_1, %specific_fn.loc25 [concrete = constants.%bound_method.c11] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc25: init %i32 = call %bound_method.loc25_14.2(%int_1) [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: %.loc25_14: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc25 [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: assign %w.var, %.loc25_14 +// CHECK:STDOUT: %.loc25_14.1: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc25 [concrete = constants.%int_1.5d2] +// CHECK:STDOUT: assign %w.var, %.loc25_14.1 // CHECK:STDOUT: %.loc25_21: type = splice_block %i32.loc25 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -180,16 +182,20 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %bound_method.loc27_11.2: = bound_method %int_0.loc27, %specific_fn.loc27 [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc27: init %i32 = call %bound_method.loc27_11.2(%int_0.loc27) [concrete = constants.%int_0.6a9] // CHECK:STDOUT: %.loc27: init %i32 = converted %int_0.loc27, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc27 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc25: = bound_method %w.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc25_14.3: = bound_method %w.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc25: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc25_14.2: %type_where = converted constants.%i32, %facet_value.loc25 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc25: = bound_method %w.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc25_14.3: = bound_method %w.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc25: %ptr.235 = addr_of %w.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc25: init %empty_tuple.type = call %bound_method.loc25_14.3(%addr.loc25) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc17: = bound_method %v.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc17_14.3: = bound_method %v.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc25: init %empty_tuple.type = call %bound_method.loc25_14.3(%addr.loc25) +// CHECK:STDOUT: %facet_value.loc17: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc17_14.2: %type_where = converted constants.%i32, %facet_value.loc17 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc17: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc17_14.3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc17: %ptr.235 = addr_of %v.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc17: init %empty_tuple.type = call %bound_method.loc17_14.3(%addr.loc17) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc17: init %empty_tuple.type = call %bound_method.loc17_14.3(%addr.loc17) // CHECK:STDOUT: return %.loc27 to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -210,8 +216,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %specific_fn.loc32: = specific_function %impl.elem0.loc32, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc32_14.2: = bound_method %int_0.loc32, %specific_fn.loc32 [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc32: init %i32 = call %bound_method.loc32_14.2(%int_0.loc32) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc32_14: init %i32 = converted %int_0.loc32, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc32 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %v.var, %.loc32_14 +// CHECK:STDOUT: %.loc32_14.1: init %i32 = converted %int_0.loc32, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc32 [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %v.var, %.loc32_14.1 // CHECK:STDOUT: %.loc32_21: type = splice_block %i32.loc32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -232,8 +238,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %specific_fn.loc41: = specific_function %impl.elem0.loc41, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc41_16.2: = bound_method %int_1, %specific_fn.loc41 [concrete = constants.%bound_method.c11] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc41: init %i32 = call %bound_method.loc41_16.2(%int_1) [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: %.loc41_16: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc41 [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: assign %w.var, %.loc41_16 +// CHECK:STDOUT: %.loc41_16.1: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc41 [concrete = constants.%int_1.5d2] +// CHECK:STDOUT: assign %w.var, %.loc41_16.1 // CHECK:STDOUT: %.loc41_23: type = splice_block %i32.loc41 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc41: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc41: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -252,16 +258,20 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %bound_method.loc44_11.2: = bound_method %int_0.loc44, %specific_fn.loc44 [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc44: init %i32 = call %bound_method.loc44_11.2(%int_0.loc44) [concrete = constants.%int_0.6a9] // CHECK:STDOUT: %.loc44: init %i32 = converted %int_0.loc44, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc44 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc41: = bound_method %w.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc41_16.3: = bound_method %w.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc41: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc41_16.2: %type_where = converted constants.%i32, %facet_value.loc41 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc41: = bound_method %w.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc41_16.3: = bound_method %w.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc41: %ptr.235 = addr_of %w.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc41: init %empty_tuple.type = call %bound_method.loc41_16.3(%addr.loc41) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc32: = bound_method %v.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc32_14.3: = bound_method %v.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc41: init %empty_tuple.type = call %bound_method.loc41_16.3(%addr.loc41) +// CHECK:STDOUT: %facet_value.loc32: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc32_14.2: %type_where = converted constants.%i32, %facet_value.loc32 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc32: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc32_14.3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc32: %ptr.235 = addr_of %v.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc32: init %empty_tuple.type = call %bound_method.loc32_14.3(%addr.loc32) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc32: init %empty_tuple.type = call %bound_method.loc32_14.3(%addr.loc32) // CHECK:STDOUT: return %.loc44 to %return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/return/fail_returned_var_type.carbon b/toolchain/check/testdata/return/fail_returned_var_type.carbon index 3d5980a878d0..b4f44b6597fb 100644 --- a/toolchain/check/testdata/return/fail_returned_var_type.carbon +++ b/toolchain/check/testdata/return/fail_returned_var_type.carbon @@ -58,10 +58,12 @@ fn Mismatch() -> i32 { // CHECK:STDOUT: %bound_method: = bound_method %float.1f7, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %float.0a8: %f64.d77 = float_value 0 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.type.952: type = fn_type @Float.as.Destroy.impl.Op, @Float.as.Destroy.impl(%int_64) [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.b8c: %Float.as.Destroy.impl.Op.type.952 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %f64.d77, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.fb8: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.0bc: %AggregateT.as_type.as.Destroy.impl.Op.type.fb8 = struct_value () [concrete] // CHECK:STDOUT: %ptr.bcc: type = ptr_type %f64.d77 [concrete] -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.specific_fn: = specific_function %Float.as.Destroy.impl.Op.b8c, @Float.as.Destroy.impl.Op(%int_64) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.0bc, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -111,19 +113,21 @@ fn Mismatch() -> i32 { // 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] // CHECK:STDOUT: %bound_method.loc23_12.2: = bound_method %float, %specific_fn [concrete = constants.%bound_method] // CHECK:STDOUT: %Core.FloatLiteral.as.ImplicitAs.impl.Convert.call: init %f64.d77 = call %bound_method.loc23_12.2(%float) [concrete = constants.%float.0a8] -// CHECK:STDOUT: %.loc23_12: init %f64.d77 = converted %float, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%float.0a8] -// CHECK:STDOUT: assign %v.var, %.loc23_12 +// CHECK:STDOUT: %.loc23_12.1: init %f64.d77 = converted %float, %Core.FloatLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%float.0a8] +// CHECK:STDOUT: assign %v.var, %.loc23_12.1 // CHECK:STDOUT: %.loc23_19: type = splice_block %f64 [concrete = constants.%f64.d77] { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %f64: type = class_type @Float, @Float(constants.%int_64) [concrete = constants.%f64.d77] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %f64.d77 = bind_name v, %v.var // CHECK:STDOUT: %.loc23_16: %f64.d77 = bind_value %v -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%Float.as.Destroy.impl.Op.b8c -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Float.as.Destroy.impl.Op.b8c, @Float.as.Destroy.impl.Op(constants.%int_64) [concrete = constants.%Float.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc23_12.3: = bound_method %v.var, %Float.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%f64.d77, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc23_12.2: %type_where = converted constants.%f64.d77, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.0bc +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.0bc, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc23_12.3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.bcc = addr_of %v.var -// CHECK:STDOUT: %Float.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc23_12.3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc23_12.3(%addr) // CHECK:STDOUT: return %.loc23_16 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/return/import_convert_function.carbon b/toolchain/check/testdata/return/import_convert_function.carbon index d7ba8e9ae7da..767b0e02e891 100644 --- a/toolchain/check/testdata/return/import_convert_function.carbon +++ b/toolchain/check/testdata/return/import_convert_function.carbon @@ -61,22 +61,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.506: type = class_type @C, @C(%N.51e) [symbolic] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.587: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %ptr.128: type = ptr_type %C.506 [symbolic] -// CHECK:STDOUT: %pattern_type.d64: type = pattern_type %ptr.128 [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = 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: %D: type = class_type @D [concrete] // CHECK:STDOUT: %D.elem: type = unbound_element_type %D, %i32 [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.cd5: = impl_witness @D.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] -// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op.type: type = fn_type @D.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %D.as.Destroy.impl.Op: %D.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.n.m.de8: type = struct_type {.n: %i32, .m: %i32} [concrete] // CHECK:STDOUT: %complete_type.ea0: = complete_type_witness %struct_type.n.m.de8 [concrete] // CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] @@ -175,13 +163,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.impl [concrete] @@ -360,51 +346,6 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.impl_witness.loc15: = impl_witness %ImplicitAs.impl_witness_table.loc15 [concrete = constants.%ImplicitAs.impl_witness.19e] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(@C.%N.loc4_9.2: %i32) { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%N) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table, @C.as.Destroy.impl(%N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.587)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%N) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type) = fn_decl @C.as.Destroy.impl.Op [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op)] { -// CHECK:STDOUT: %self.patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d64) = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: @C.as.Destroy.impl.Op.%pattern_type (%pattern_type.d64) = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4_18.1: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.128) = value_param call_param0 -// CHECK:STDOUT: %.loc4_18.2: type = splice_block %Self.ref [symbolic = %C (constants.%C.506)] { -// CHECK:STDOUT: %.loc4_18.3: type = specific_constant constants.%C.506, @C(constants.%N.51e) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc4_18.3 [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: } -// CHECK:STDOUT: %self: @C.as.Destroy.impl.Op.%ptr (%ptr.128) = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: @D.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %D.as.Destroy.impl.Op.decl: %D.as.Destroy.impl.Op.type = fn_decl @D.as.Destroy.impl.Op [concrete = constants.%D.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.a94 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.a94 = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc5: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.19c = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: %self: %ptr.19c = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %D.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @D.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.ImplicitAs.impl.890: %C as %ImplicitAs.type { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.decl: %C.as.ImplicitAs.impl.Convert.type.478 = fn_decl @C.as.ImplicitAs.impl.Convert.loc8 [concrete = constants.%C.as.ImplicitAs.impl.Convert.97f] { // CHECK:STDOUT: %self.patt: %pattern_type.f33 = binding_pattern self [concrete] @@ -587,10 +528,6 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.506 [symbolic = @C.as.Destroy.impl.%C (constants.%C.506)] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table, @C.as.Destroy.impl(constants.%N.51e) [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.587)] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -606,10 +543,6 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_32.loc5_30: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5_30: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc5_28: %D.elem = field_decl m, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%D [concrete = constants.%D] -// CHECK:STDOUT: impl_decl @D.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@D.as.Destroy.impl.%D.as.Destroy.impl.Op.decl), @D.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.cd5] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.n.m.de8 [concrete = constants.%complete_type.ea0] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -619,19 +552,6 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: .m = %.loc5_28 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(@C.%N.loc4_9.2: %i32) { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%N) [symbolic = %C (constants.%C.506)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.128)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.d64)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%self.param: @C.as.Destroy.impl.Op.%ptr (%ptr.128)) = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @D.as.Destroy.impl.Op(%self.param: %ptr.19c) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @Make() -> %return.param: %D { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %int_0.loc6_31: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -726,19 +646,6 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %N.loc4_9.1 => constants.%N.51e // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %C => constants.%C.506 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.587 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %C => constants.%C.506 -// CHECK:STDOUT: %ptr => constants.%ptr.128 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d64 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_0.6a9) { // CHECK:STDOUT: %N.loc4_9.1 => constants.%int_0.6a9 // CHECK:STDOUT: @@ -808,7 +715,6 @@ fn F0(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.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %C.17a: type = class_type @C, @C(%N.51e) [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] @@ -850,17 +756,12 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.7ddb8: type = fn_type @C.as.ImplicitAs.impl.Convert.1 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.43b: %C.as.ImplicitAs.impl.Convert.type.7ddb8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.81b: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.d6a: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%N.51e) [symbolic] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.73c: %C.as.Destroy.impl.Op.type.d6a = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.9e5: type = ptr_type %C.17a [symbolic] -// CHECK:STDOUT: %pattern_type.572: type = pattern_type %ptr.9e5 [symbolic] -// CHECK:STDOUT: %Destroy.impl_witness.7a6: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%int_0.6a9) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.a79: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%int_0.6a9) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.f24: %C.as.Destroy.impl.Op.type.a79 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value.e56: %type_where = facet_value %C.b00, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.a78: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.e56) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.050: %AggregateT.as_type.as.Destroy.impl.Op.type.a78 = struct_value () [concrete] // CHECK:STDOUT: %ptr.697: type = ptr_type %C.b00 [concrete] -// CHECK:STDOUT: %pattern_type.7d1: type = pattern_type %ptr.697 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.f26: = specific_function %C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(%int_0.6a9) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.e56) [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.abf: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0 [concrete] // CHECK:STDOUT: %bound_method.c11: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -870,12 +771,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.5da: type = fn_type_with_self_type %ImplicitAs.Convert.type.334, %ImplicitAs.facet.47a [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.f4e: type = fn_type @C.as.ImplicitAs.impl.Convert.2 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.e68: %C.as.ImplicitAs.impl.Convert.type.f4e = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.c26: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%int_1.5d2) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.5a4: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%int_1.5d2) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.6d5: %C.as.Destroy.impl.Op.type.5a4 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.4dd: %type_where = facet_value %C.674, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.895: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.4dd) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.998: %AggregateT.as_type.as.Destroy.impl.Op.type.895 = struct_value () [concrete] // CHECK:STDOUT: %ptr.625: type = ptr_type %C.674 [concrete] -// CHECK:STDOUT: %pattern_type.559: type = pattern_type %ptr.625 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.52d: = specific_function %C.as.Destroy.impl.Op.6d5, @C.as.Destroy.impl.Op(%int_1.5d2) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.179: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.998, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.4dd) [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.b82: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0 [concrete] // CHECK:STDOUT: %bound_method.8bd: = bound_method %int_2.ecc, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -885,12 +785,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.b2b: type = fn_type_with_self_type %ImplicitAs.Convert.type.334, %ImplicitAs.facet.a5f [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.7cc: type = fn_type @C.as.ImplicitAs.impl.Convert.3 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.cb1: %C.as.ImplicitAs.impl.Convert.type.7cc = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.a29: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%int_2.ef8) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.10b: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%int_2.ef8) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.73a: %C.as.Destroy.impl.Op.type.10b = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.7fe: %type_where = facet_value %C.681, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.a2a: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.7fe) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.aa7: %AggregateT.as_type.as.Destroy.impl.Op.type.a2a = struct_value () [concrete] // CHECK:STDOUT: %ptr.3bd: type = ptr_type %C.681 [concrete] -// CHECK:STDOUT: %pattern_type.b50: type = pattern_type %ptr.3bd [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.c12: = specific_function %C.as.Destroy.impl.Op.73a, @C.as.Destroy.impl.Op(%int_2.ef8) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.781: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.aa7, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.7fe) [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.595: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0 [concrete] // CHECK:STDOUT: %bound_method.f36: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -900,12 +799,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.11b: type = fn_type_with_self_type %ImplicitAs.Convert.type.334, %ImplicitAs.facet.c0d [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.cba: type = fn_type @C.as.ImplicitAs.impl.Convert.4 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.67e: %C.as.ImplicitAs.impl.Convert.type.cba = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.73b: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%int_3.822) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.d33: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%int_3.822) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.3c4: %C.as.Destroy.impl.Op.type.d33 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.99b: %type_where = facet_value %C.7ac, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.af2: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.99b) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.423: %AggregateT.as_type.as.Destroy.impl.Op.type.af2 = struct_value () [concrete] // CHECK:STDOUT: %ptr.2b1: type = ptr_type %C.7ac [concrete] -// CHECK:STDOUT: %pattern_type.9f4: type = pattern_type %ptr.2b1 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.645: = specific_function %C.as.Destroy.impl.Op.3c4, @C.as.Destroy.impl.Op(%int_3.822) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.060: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.423, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.99b) [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.5bb: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0 [concrete] // CHECK:STDOUT: %bound_method.9cd: = bound_method %int_4.0c1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -915,12 +813,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.0dc: type = fn_type_with_self_type %ImplicitAs.Convert.type.334, %ImplicitAs.facet.5f1 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.a2c: type = fn_type @C.as.ImplicitAs.impl.Convert.5 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.58d: %C.as.ImplicitAs.impl.Convert.type.a2c = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.3df: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%int_4.940) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.a16: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%int_4.940) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.3ab: %C.as.Destroy.impl.Op.type.a16 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.b4c: %type_where = facet_value %C.89d, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.d8b: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.b4c) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b4d: %AggregateT.as_type.as.Destroy.impl.Op.type.d8b = struct_value () [concrete] // CHECK:STDOUT: %ptr.c28b: type = ptr_type %C.89d [concrete] -// CHECK:STDOUT: %pattern_type.a33: type = pattern_type %ptr.c28b [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.c85: = specific_function %C.as.Destroy.impl.Op.3ab, @C.as.Destroy.impl.Op(%int_4.940) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4d6: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b4d, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.b4c) [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.23d: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0 [concrete] // CHECK:STDOUT: %bound_method.724: = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -930,12 +827,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.332: type = fn_type_with_self_type %ImplicitAs.Convert.type.334, %ImplicitAs.facet.489 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.bf6: type = fn_type @C.as.ImplicitAs.impl.Convert.6 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.a45: %C.as.ImplicitAs.impl.Convert.type.bf6 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.bce: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%int_5.0f6) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.8a2: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%int_5.0f6) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.986: %C.as.Destroy.impl.Op.type.8a2 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.430: %type_where = facet_value %C.f0a, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.4eb: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.430) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.b39: %AggregateT.as_type.as.Destroy.impl.Op.type.4eb = struct_value () [concrete] // CHECK:STDOUT: %ptr.24c: type = ptr_type %C.f0a [concrete] -// CHECK:STDOUT: %pattern_type.37e: type = pattern_type %ptr.24c [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.8de: = specific_function %C.as.Destroy.impl.Op.986, @C.as.Destroy.impl.Op(%int_5.0f6) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.b9e: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.b39, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.430) [concrete] // CHECK:STDOUT: %int_6.462: Core.IntLiteral = int_value 6 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.d66: = bound_method %int_6.462, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0 [concrete] // CHECK:STDOUT: %bound_method.0ef: = bound_method %int_6.462, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -945,12 +841,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.1bb: type = fn_type_with_self_type %ImplicitAs.Convert.type.334, %ImplicitAs.facet.d57 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.e95: type = fn_type @C.as.ImplicitAs.impl.Convert.7 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.ad0: %C.as.ImplicitAs.impl.Convert.type.e95 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.3c1: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%int_6.e56) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.0c8: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%int_6.e56) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.4b4: %C.as.Destroy.impl.Op.type.0c8 = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.14a: %type_where = facet_value %C.c60, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.ecc: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.14a) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.062: %AggregateT.as_type.as.Destroy.impl.Op.type.ecc = struct_value () [concrete] // CHECK:STDOUT: %ptr.b5e: type = ptr_type %C.c60 [concrete] -// CHECK:STDOUT: %pattern_type.667: type = pattern_type %ptr.b5e [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.0b3: = specific_function %C.as.Destroy.impl.Op.4b4, @C.as.Destroy.impl.Op(%int_6.e56) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4a7: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.062, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.14a) [concrete] // CHECK:STDOUT: %int_7.29f: Core.IntLiteral = int_value 7 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.113: = bound_method %int_7.29f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0 [concrete] // CHECK:STDOUT: %bound_method.763: = bound_method %int_7.29f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] @@ -960,12 +855,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.bc1: type = fn_type_with_self_type %ImplicitAs.Convert.type.334, %ImplicitAs.facet.faa [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.type.7ddb0: type = fn_type @C.as.ImplicitAs.impl.Convert.8 [concrete] // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.9be: %C.as.ImplicitAs.impl.Convert.type.7ddb0 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.390: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%int_7.0b1) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type.17f: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%int_7.0b1) [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.3a5: %C.as.Destroy.impl.Op.type.17f = struct_value () [concrete] +// CHECK:STDOUT: %facet_value.488: %type_where = facet_value %C.304, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.963: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value.488) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.28e: %AggregateT.as_type.as.Destroy.impl.Op.type.963 = struct_value () [concrete] // CHECK:STDOUT: %ptr.dc3: type = ptr_type %C.304 [concrete] -// CHECK:STDOUT: %pattern_type.12a: type = pattern_type %ptr.dc3 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.79d: = specific_function %C.as.Destroy.impl.Op.3a5, @C.as.Destroy.impl.Op(%int_7.0b1) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.8dc: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.28e, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value.488) [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -987,11 +881,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic] // CHECK:STDOUT: %P.D: type = import_ref P//library, D, loaded [concrete = constants.%D] // CHECK:STDOUT: %P.import_ref.a7d: = import_ref P//library, loc5_35, loaded [concrete = constants.%complete_type.ea0] -// CHECK:STDOUT: %P.import_ref.cab = import_ref P//library, inst111 [no loc], unloaded +// CHECK:STDOUT: %P.import_ref.cab = import_ref P//library, inst59 [no loc], unloaded // CHECK:STDOUT: %P.import_ref.a525 = import_ref P//library, loc5_16, unloaded // CHECK:STDOUT: %P.import_ref.b4a = import_ref P//library, loc5_28, unloaded // CHECK:STDOUT: %P.C: %C.type = import_ref P//library, C, loaded [concrete = constants.%C.generic] -// CHECK:STDOUT: %P.import_ref.1b7f13.1: %i32 = import_ref P//library, loc4_9, loaded [symbolic = @C.%N (constants.%N.51e)] +// CHECK:STDOUT: %P.import_ref.1b7: %i32 = import_ref P//library, loc4_9, loaded [symbolic = @C.%N (constants.%N.51e)] // CHECK:STDOUT: %P.import_ref.8f2: = import_ref P//library, loc4_19, loaded [concrete = constants.%complete_type.357] // CHECK:STDOUT: %P.import_ref.f65 = import_ref P//library, inst54 [no loc], unloaded // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] @@ -1024,16 +918,6 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %P.import_ref.381: %C.as.ImplicitAs.impl.Convert.type.7ddb8 = import_ref P//library, loc8_65, loaded [concrete = constants.%C.as.ImplicitAs.impl.Convert.43b] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.2b6 = impl_witness_table (%P.import_ref.381), @C.as.ImplicitAs.impl.c36 [concrete] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %P.import_ref.e7d: = import_ref P//library, loc4_18, loaded [symbolic = @C.as.Destroy.impl.%Destroy.impl_witness (constants.%Destroy.impl_witness.81b)] -// CHECK:STDOUT: %P.import_ref.1b7f13.2: %i32 = import_ref P//library, loc4_9, loaded [symbolic = @C.%N (constants.%N.51e)] -// CHECK:STDOUT: %P.import_ref.8b3: type = import_ref P//library, loc4_18, loaded [symbolic = @C.as.Destroy.impl.%C (constants.%C.17a)] -// CHECK:STDOUT: %P.import_ref.e45cb5.1: type = import_ref P//library, inst57 [no loc], loaded [concrete = constants.%Destroy.type] -// CHECK:STDOUT: %P.import_ref.d0d: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.d6a) = import_ref P//library, loc4_18, loaded [symbolic = @C.as.Destroy.impl.%C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.73c)] -// CHECK:STDOUT: %Destroy.impl_witness_table.51d = impl_witness_table (%P.import_ref.d0d), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %P.import_ref.1b7f13.3: %i32 = import_ref P//library, loc4_9, loaded [symbolic = @C.%N (constants.%N.51e)] -// CHECK:STDOUT: %P.import_ref.2b5 = import_ref P//library, loc5_9, unloaded -// CHECK:STDOUT: %P.import_ref.130: type = import_ref P//library, loc5_9, loaded [concrete = constants.%D] -// CHECK:STDOUT: %P.import_ref.e45cb5.2: type = import_ref P//library, inst57 [no loc], loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %P.import_ref.aa6: %C.as.ImplicitAs.impl.Convert.type.f4e = import_ref P//library, loc9_65, loaded [concrete = constants.%C.as.ImplicitAs.impl.Convert.e68] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.ff5 = impl_witness_table (%P.import_ref.aa6), @C.as.ImplicitAs.impl.4a1 [concrete] // CHECK:STDOUT: %P.import_ref.c8c: %C.as.ImplicitAs.impl.Convert.type.7cc = import_ref P//library, loc10_65, loaded [concrete = constants.%C.as.ImplicitAs.impl.Convert.cb1] @@ -1118,26 +1002,6 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: witness = imports.%P.import_ref.b1e // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic impl @C.as.Destroy.impl(imports.%P.import_ref.1b7f13.2: %i32) [from "library.carbon"] { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%N) [symbolic = %C (constants.%C.17a)] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness imports.%Destroy.impl_witness_table.51d, @C.as.Destroy.impl(%N) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.81b)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op, @C.as.Destroy.impl(%N) [symbolic = %C.as.Destroy.impl.Op.type (constants.%C.as.Destroy.impl.Op.type.d6a)] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: @C.as.Destroy.impl.%C.as.Destroy.impl.Op.type (%C.as.Destroy.impl.Op.type.d6a) = struct_value () [symbolic = %C.as.Destroy.impl.Op (constants.%C.as.Destroy.impl.Op.73c)] -// CHECK:STDOUT: -// CHECK:STDOUT: impl: imports.%P.import_ref.8b3 as imports.%P.import_ref.e45cb5.1 { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%P.import_ref.e7d -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @D.as.Destroy.impl: imports.%P.import_ref.130 as imports.%P.import_ref.e45cb5.2 [from "library.carbon"] { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = imports.%P.import_ref.2b5 -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @D [from "library.carbon"] { // CHECK:STDOUT: complete_type_witness = imports.%P.import_ref.a7d // CHECK:STDOUT: @@ -1147,7 +1011,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: .m = imports.%P.import_ref.b4a // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic class @C(imports.%P.import_ref.1b7f13.1: %i32) [from "library.carbon"] { +// CHECK:STDOUT: generic class @C(imports.%P.import_ref.1b7: %i32) [from "library.carbon"] { // CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1188,11 +1052,13 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.loc7_26.2: %C.b00 = bind_value %.loc7_26.1 // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call.loc7: init %D = call %bound_method.loc7_35(%.loc7_26.2) to %.loc7_35.1 // CHECK:STDOUT: %.loc7_35.2: init %D = converted %.loc7_26.1, %C.as.ImplicitAs.impl.Convert.call.loc7 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc7_24.1: = bound_method %.loc7_24.4, constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.f26] -// CHECK:STDOUT: %bound_method.loc7_24.1: = bound_method %.loc7_24.4, %C.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc7_24.1: %type_where = facet_value constants.%C.b00, () [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %.loc7_24.5: %type_where = converted constants.%C.b00, %facet_value.loc7_24.1 [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7_24.1: = bound_method %.loc7_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.050 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.e56) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2] +// CHECK:STDOUT: %bound_method.loc7_24.1: = bound_method %.loc7_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc7_24.1: %ptr.697 = addr_of %.loc7_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc7_24.1: init %empty_tuple.type = call %bound_method.loc7_24.1(%addr.loc7_24.1) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7_24.1: init %empty_tuple.type = call %bound_method.loc7_24.1(%addr.loc7_24.1) // CHECK:STDOUT: return %.loc7_35.2 to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else.loc7: @@ -1222,16 +1088,20 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.loc8_26.2: %C.674 = bind_value %.loc8_26.1 // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call.loc8: init %D = call %bound_method.loc8_35(%.loc8_26.2) to %.loc8_35.1 // CHECK:STDOUT: %.loc8_35.2: init %D = converted %.loc8_26.1, %C.as.ImplicitAs.impl.Convert.call.loc8 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc8_24.1: = bound_method %.loc8_24.4, constants.%C.as.Destroy.impl.Op.6d5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%C.as.Destroy.impl.Op.6d5, @C.as.Destroy.impl.Op(constants.%int_1.5d2) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.52d] -// CHECK:STDOUT: %bound_method.loc8_24.1: = bound_method %.loc8_24.4, %C.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %facet_value.loc8_24.1: %type_where = facet_value constants.%C.674, () [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %.loc8_24.5: %type_where = converted constants.%C.674, %facet_value.loc8_24.1 [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc8_24.1: = bound_method %.loc8_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.998 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.998, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4dd) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.179] +// CHECK:STDOUT: %bound_method.loc8_24.1: = bound_method %.loc8_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc8_24.1: %ptr.625 = addr_of %.loc8_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc8_24.1: init %empty_tuple.type = call %bound_method.loc8_24.1(%addr.loc8_24.1) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc7_24.2: = bound_method %.loc7_24.4, constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.f26] -// CHECK:STDOUT: %bound_method.loc7_24.2: = bound_method %.loc7_24.4, %C.as.Destroy.impl.Op.specific_fn.3 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc8_24.1: init %empty_tuple.type = call %bound_method.loc8_24.1(%addr.loc8_24.1) +// CHECK:STDOUT: %facet_value.loc7_24.2: %type_where = facet_value constants.%C.b00, () [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %.loc7_24.6: %type_where = converted constants.%C.b00, %facet_value.loc7_24.2 [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7_24.2: = bound_method %.loc7_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.050 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.e56) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2] +// CHECK:STDOUT: %bound_method.loc7_24.2: = bound_method %.loc7_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc7_24.2: %ptr.697 = addr_of %.loc7_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc7_24.2: init %empty_tuple.type = call %bound_method.loc7_24.2(%addr.loc7_24.2) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7_24.2: init %empty_tuple.type = call %bound_method.loc7_24.2(%addr.loc7_24.2) // CHECK:STDOUT: return %.loc8_35.2 to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else.loc8: @@ -1261,21 +1131,27 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.loc9_26.2: %C.681 = bind_value %.loc9_26.1 // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call.loc9: init %D = call %bound_method.loc9_35(%.loc9_26.2) to %.loc9_35.1 // CHECK:STDOUT: %.loc9_35.2: init %D = converted %.loc9_26.1, %C.as.ImplicitAs.impl.Convert.call.loc9 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc9_24.1: = bound_method %.loc9_24.4, constants.%C.as.Destroy.impl.Op.73a -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.4: = specific_function constants.%C.as.Destroy.impl.Op.73a, @C.as.Destroy.impl.Op(constants.%int_2.ef8) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c12] -// CHECK:STDOUT: %bound_method.loc9_24.1: = bound_method %.loc9_24.4, %C.as.Destroy.impl.Op.specific_fn.4 +// CHECK:STDOUT: %facet_value.loc9_24.1: %type_where = facet_value constants.%C.681, () [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %.loc9_24.5: %type_where = converted constants.%C.681, %facet_value.loc9_24.1 [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc9_24.1: = bound_method %.loc9_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.7fe) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.781] +// CHECK:STDOUT: %bound_method.loc9_24.1: = bound_method %.loc9_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4 // CHECK:STDOUT: %addr.loc9_24.1: %ptr.3bd = addr_of %.loc9_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc9_24.1: init %empty_tuple.type = call %bound_method.loc9_24.1(%addr.loc9_24.1) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc8_24.2: = bound_method %.loc8_24.4, constants.%C.as.Destroy.impl.Op.6d5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.5: = specific_function constants.%C.as.Destroy.impl.Op.6d5, @C.as.Destroy.impl.Op(constants.%int_1.5d2) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.52d] -// CHECK:STDOUT: %bound_method.loc8_24.2: = bound_method %.loc8_24.4, %C.as.Destroy.impl.Op.specific_fn.5 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc9_24.1: init %empty_tuple.type = call %bound_method.loc9_24.1(%addr.loc9_24.1) +// CHECK:STDOUT: %facet_value.loc8_24.2: %type_where = facet_value constants.%C.674, () [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %.loc8_24.6: %type_where = converted constants.%C.674, %facet_value.loc8_24.2 [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc8_24.2: = bound_method %.loc8_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.998 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.998, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4dd) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.179] +// CHECK:STDOUT: %bound_method.loc8_24.2: = bound_method %.loc8_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5 // CHECK:STDOUT: %addr.loc8_24.2: %ptr.625 = addr_of %.loc8_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc8_24.2: init %empty_tuple.type = call %bound_method.loc8_24.2(%addr.loc8_24.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc7_24.3: = bound_method %.loc7_24.4, constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.6: = specific_function constants.%C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.f26] -// CHECK:STDOUT: %bound_method.loc7_24.3: = bound_method %.loc7_24.4, %C.as.Destroy.impl.Op.specific_fn.6 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc8_24.2: init %empty_tuple.type = call %bound_method.loc8_24.2(%addr.loc8_24.2) +// CHECK:STDOUT: %facet_value.loc7_24.3: %type_where = facet_value constants.%C.b00, () [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %.loc7_24.7: %type_where = converted constants.%C.b00, %facet_value.loc7_24.3 [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7_24.3: = bound_method %.loc7_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.050 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.6: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.e56) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2] +// CHECK:STDOUT: %bound_method.loc7_24.3: = bound_method %.loc7_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.6 // CHECK:STDOUT: %addr.loc7_24.3: %ptr.697 = addr_of %.loc7_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc7_24.3: init %empty_tuple.type = call %bound_method.loc7_24.3(%addr.loc7_24.3) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7_24.3: init %empty_tuple.type = call %bound_method.loc7_24.3(%addr.loc7_24.3) // CHECK:STDOUT: return %.loc9_35.2 to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else.loc9: @@ -1305,26 +1181,34 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.loc10_26.2: %C.7ac = bind_value %.loc10_26.1 // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call.loc10: init %D = call %bound_method.loc10_35(%.loc10_26.2) to %.loc10_35.1 // CHECK:STDOUT: %.loc10_35.2: init %D = converted %.loc10_26.1, %C.as.ImplicitAs.impl.Convert.call.loc10 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc10_24.1: = bound_method %.loc10_24.4, constants.%C.as.Destroy.impl.Op.3c4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.7: = specific_function constants.%C.as.Destroy.impl.Op.3c4, @C.as.Destroy.impl.Op(constants.%int_3.822) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.645] -// CHECK:STDOUT: %bound_method.loc10_24.1: = bound_method %.loc10_24.4, %C.as.Destroy.impl.Op.specific_fn.7 +// CHECK:STDOUT: %facet_value.loc10_24.1: %type_where = facet_value constants.%C.7ac, () [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %.loc10_24.5: %type_where = converted constants.%C.7ac, %facet_value.loc10_24.1 [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_24.1: = bound_method %.loc10_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.423 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.7: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.423, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.99b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.060] +// CHECK:STDOUT: %bound_method.loc10_24.1: = bound_method %.loc10_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.7 // CHECK:STDOUT: %addr.loc10_24.1: %ptr.2b1 = addr_of %.loc10_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc10_24.1: init %empty_tuple.type = call %bound_method.loc10_24.1(%addr.loc10_24.1) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc9_24.2: = bound_method %.loc9_24.4, constants.%C.as.Destroy.impl.Op.73a -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.8: = specific_function constants.%C.as.Destroy.impl.Op.73a, @C.as.Destroy.impl.Op(constants.%int_2.ef8) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c12] -// CHECK:STDOUT: %bound_method.loc9_24.2: = bound_method %.loc9_24.4, %C.as.Destroy.impl.Op.specific_fn.8 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_24.1: init %empty_tuple.type = call %bound_method.loc10_24.1(%addr.loc10_24.1) +// CHECK:STDOUT: %facet_value.loc9_24.2: %type_where = facet_value constants.%C.681, () [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %.loc9_24.6: %type_where = converted constants.%C.681, %facet_value.loc9_24.2 [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc9_24.2: = bound_method %.loc9_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.8: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.7fe) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.781] +// CHECK:STDOUT: %bound_method.loc9_24.2: = bound_method %.loc9_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.8 // CHECK:STDOUT: %addr.loc9_24.2: %ptr.3bd = addr_of %.loc9_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc9_24.2: init %empty_tuple.type = call %bound_method.loc9_24.2(%addr.loc9_24.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc8_24.3: = bound_method %.loc8_24.4, constants.%C.as.Destroy.impl.Op.6d5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.9: = specific_function constants.%C.as.Destroy.impl.Op.6d5, @C.as.Destroy.impl.Op(constants.%int_1.5d2) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.52d] -// CHECK:STDOUT: %bound_method.loc8_24.3: = bound_method %.loc8_24.4, %C.as.Destroy.impl.Op.specific_fn.9 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc9_24.2: init %empty_tuple.type = call %bound_method.loc9_24.2(%addr.loc9_24.2) +// CHECK:STDOUT: %facet_value.loc8_24.3: %type_where = facet_value constants.%C.674, () [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %.loc8_24.7: %type_where = converted constants.%C.674, %facet_value.loc8_24.3 [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc8_24.3: = bound_method %.loc8_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.998 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.9: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.998, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4dd) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.179] +// CHECK:STDOUT: %bound_method.loc8_24.3: = bound_method %.loc8_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.9 // CHECK:STDOUT: %addr.loc8_24.3: %ptr.625 = addr_of %.loc8_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc8_24.3: init %empty_tuple.type = call %bound_method.loc8_24.3(%addr.loc8_24.3) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc7_24.4: = bound_method %.loc7_24.4, constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.10: = specific_function constants.%C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.f26] -// CHECK:STDOUT: %bound_method.loc7_24.4: = bound_method %.loc7_24.4, %C.as.Destroy.impl.Op.specific_fn.10 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc8_24.3: init %empty_tuple.type = call %bound_method.loc8_24.3(%addr.loc8_24.3) +// CHECK:STDOUT: %facet_value.loc7_24.4: %type_where = facet_value constants.%C.b00, () [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %.loc7_24.8: %type_where = converted constants.%C.b00, %facet_value.loc7_24.4 [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7_24.4: = bound_method %.loc7_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.050 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.10: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.e56) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2] +// CHECK:STDOUT: %bound_method.loc7_24.4: = bound_method %.loc7_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.10 // CHECK:STDOUT: %addr.loc7_24.4: %ptr.697 = addr_of %.loc7_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc7_24.4: init %empty_tuple.type = call %bound_method.loc7_24.4(%addr.loc7_24.4) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7_24.4: init %empty_tuple.type = call %bound_method.loc7_24.4(%addr.loc7_24.4) // CHECK:STDOUT: return %.loc10_35.2 to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else.loc10: @@ -1354,31 +1238,41 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.loc11_26.2: %C.89d = bind_value %.loc11_26.1 // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call.loc11: init %D = call %bound_method.loc11_35(%.loc11_26.2) to %.loc11_35.1 // CHECK:STDOUT: %.loc11_35.2: init %D = converted %.loc11_26.1, %C.as.ImplicitAs.impl.Convert.call.loc11 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc11_24.1: = bound_method %.loc11_24.4, constants.%C.as.Destroy.impl.Op.3ab -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.11: = specific_function constants.%C.as.Destroy.impl.Op.3ab, @C.as.Destroy.impl.Op(constants.%int_4.940) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c85] -// CHECK:STDOUT: %bound_method.loc11_24.1: = bound_method %.loc11_24.4, %C.as.Destroy.impl.Op.specific_fn.11 +// CHECK:STDOUT: %facet_value.loc11_24.1: %type_where = facet_value constants.%C.89d, () [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %.loc11_24.5: %type_where = converted constants.%C.89d, %facet_value.loc11_24.1 [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc11_24.1: = bound_method %.loc11_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.11: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.b4c) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4d6] +// CHECK:STDOUT: %bound_method.loc11_24.1: = bound_method %.loc11_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.11 // CHECK:STDOUT: %addr.loc11_24.1: %ptr.c28b = addr_of %.loc11_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc11_24.1: init %empty_tuple.type = call %bound_method.loc11_24.1(%addr.loc11_24.1) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc10_24.2: = bound_method %.loc10_24.4, constants.%C.as.Destroy.impl.Op.3c4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.12: = specific_function constants.%C.as.Destroy.impl.Op.3c4, @C.as.Destroy.impl.Op(constants.%int_3.822) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.645] -// CHECK:STDOUT: %bound_method.loc10_24.2: = bound_method %.loc10_24.4, %C.as.Destroy.impl.Op.specific_fn.12 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc11_24.1: init %empty_tuple.type = call %bound_method.loc11_24.1(%addr.loc11_24.1) +// CHECK:STDOUT: %facet_value.loc10_24.2: %type_where = facet_value constants.%C.7ac, () [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %.loc10_24.6: %type_where = converted constants.%C.7ac, %facet_value.loc10_24.2 [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_24.2: = bound_method %.loc10_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.423 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.12: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.423, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.99b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.060] +// CHECK:STDOUT: %bound_method.loc10_24.2: = bound_method %.loc10_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.12 // CHECK:STDOUT: %addr.loc10_24.2: %ptr.2b1 = addr_of %.loc10_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc10_24.2: init %empty_tuple.type = call %bound_method.loc10_24.2(%addr.loc10_24.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc9_24.3: = bound_method %.loc9_24.4, constants.%C.as.Destroy.impl.Op.73a -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.13: = specific_function constants.%C.as.Destroy.impl.Op.73a, @C.as.Destroy.impl.Op(constants.%int_2.ef8) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c12] -// CHECK:STDOUT: %bound_method.loc9_24.3: = bound_method %.loc9_24.4, %C.as.Destroy.impl.Op.specific_fn.13 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_24.2: init %empty_tuple.type = call %bound_method.loc10_24.2(%addr.loc10_24.2) +// CHECK:STDOUT: %facet_value.loc9_24.3: %type_where = facet_value constants.%C.681, () [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %.loc9_24.7: %type_where = converted constants.%C.681, %facet_value.loc9_24.3 [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc9_24.3: = bound_method %.loc9_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.13: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.7fe) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.781] +// CHECK:STDOUT: %bound_method.loc9_24.3: = bound_method %.loc9_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.13 // CHECK:STDOUT: %addr.loc9_24.3: %ptr.3bd = addr_of %.loc9_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc9_24.3: init %empty_tuple.type = call %bound_method.loc9_24.3(%addr.loc9_24.3) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc8_24.4: = bound_method %.loc8_24.4, constants.%C.as.Destroy.impl.Op.6d5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.14: = specific_function constants.%C.as.Destroy.impl.Op.6d5, @C.as.Destroy.impl.Op(constants.%int_1.5d2) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.52d] -// CHECK:STDOUT: %bound_method.loc8_24.4: = bound_method %.loc8_24.4, %C.as.Destroy.impl.Op.specific_fn.14 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc9_24.3: init %empty_tuple.type = call %bound_method.loc9_24.3(%addr.loc9_24.3) +// CHECK:STDOUT: %facet_value.loc8_24.4: %type_where = facet_value constants.%C.674, () [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %.loc8_24.8: %type_where = converted constants.%C.674, %facet_value.loc8_24.4 [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc8_24.4: = bound_method %.loc8_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.998 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.14: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.998, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4dd) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.179] +// CHECK:STDOUT: %bound_method.loc8_24.4: = bound_method %.loc8_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.14 // CHECK:STDOUT: %addr.loc8_24.4: %ptr.625 = addr_of %.loc8_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc8_24.4: init %empty_tuple.type = call %bound_method.loc8_24.4(%addr.loc8_24.4) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc7_24.5: = bound_method %.loc7_24.4, constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.15: = specific_function constants.%C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.f26] -// CHECK:STDOUT: %bound_method.loc7_24.5: = bound_method %.loc7_24.4, %C.as.Destroy.impl.Op.specific_fn.15 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc8_24.4: init %empty_tuple.type = call %bound_method.loc8_24.4(%addr.loc8_24.4) +// CHECK:STDOUT: %facet_value.loc7_24.5: %type_where = facet_value constants.%C.b00, () [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %.loc7_24.9: %type_where = converted constants.%C.b00, %facet_value.loc7_24.5 [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7_24.5: = bound_method %.loc7_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.050 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.15: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.e56) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2] +// CHECK:STDOUT: %bound_method.loc7_24.5: = bound_method %.loc7_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.15 // CHECK:STDOUT: %addr.loc7_24.5: %ptr.697 = addr_of %.loc7_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc7_24.5: init %empty_tuple.type = call %bound_method.loc7_24.5(%addr.loc7_24.5) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7_24.5: init %empty_tuple.type = call %bound_method.loc7_24.5(%addr.loc7_24.5) // CHECK:STDOUT: return %.loc11_35.2 to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else.loc11: @@ -1408,36 +1302,48 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.loc12_26.2: %C.f0a = bind_value %.loc12_26.1 // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call.loc12: init %D = call %bound_method.loc12_35(%.loc12_26.2) to %.loc12_35.1 // CHECK:STDOUT: %.loc12_35.2: init %D = converted %.loc12_26.1, %C.as.ImplicitAs.impl.Convert.call.loc12 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc12_24.1: = bound_method %.loc12_24.4, constants.%C.as.Destroy.impl.Op.986 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.16: = specific_function constants.%C.as.Destroy.impl.Op.986, @C.as.Destroy.impl.Op(constants.%int_5.0f6) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.8de] -// CHECK:STDOUT: %bound_method.loc12_24.1: = bound_method %.loc12_24.4, %C.as.Destroy.impl.Op.specific_fn.16 +// CHECK:STDOUT: %facet_value.loc12_24.1: %type_where = facet_value constants.%C.f0a, () [concrete = constants.%facet_value.430] +// CHECK:STDOUT: %.loc12_24.5: %type_where = converted constants.%C.f0a, %facet_value.loc12_24.1 [concrete = constants.%facet_value.430] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc12_24.1: = bound_method %.loc12_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b39 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.16: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b39, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.430) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.b9e] +// CHECK:STDOUT: %bound_method.loc12_24.1: = bound_method %.loc12_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.16 // CHECK:STDOUT: %addr.loc12_24.1: %ptr.24c = addr_of %.loc12_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc12_24.1: init %empty_tuple.type = call %bound_method.loc12_24.1(%addr.loc12_24.1) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc11_24.2: = bound_method %.loc11_24.4, constants.%C.as.Destroy.impl.Op.3ab -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.17: = specific_function constants.%C.as.Destroy.impl.Op.3ab, @C.as.Destroy.impl.Op(constants.%int_4.940) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c85] -// CHECK:STDOUT: %bound_method.loc11_24.2: = bound_method %.loc11_24.4, %C.as.Destroy.impl.Op.specific_fn.17 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc12_24.1: init %empty_tuple.type = call %bound_method.loc12_24.1(%addr.loc12_24.1) +// CHECK:STDOUT: %facet_value.loc11_24.2: %type_where = facet_value constants.%C.89d, () [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %.loc11_24.6: %type_where = converted constants.%C.89d, %facet_value.loc11_24.2 [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc11_24.2: = bound_method %.loc11_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.17: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.b4c) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4d6] +// CHECK:STDOUT: %bound_method.loc11_24.2: = bound_method %.loc11_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.17 // CHECK:STDOUT: %addr.loc11_24.2: %ptr.c28b = addr_of %.loc11_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc11_24.2: init %empty_tuple.type = call %bound_method.loc11_24.2(%addr.loc11_24.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc10_24.3: = bound_method %.loc10_24.4, constants.%C.as.Destroy.impl.Op.3c4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.18: = specific_function constants.%C.as.Destroy.impl.Op.3c4, @C.as.Destroy.impl.Op(constants.%int_3.822) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.645] -// CHECK:STDOUT: %bound_method.loc10_24.3: = bound_method %.loc10_24.4, %C.as.Destroy.impl.Op.specific_fn.18 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc11_24.2: init %empty_tuple.type = call %bound_method.loc11_24.2(%addr.loc11_24.2) +// CHECK:STDOUT: %facet_value.loc10_24.3: %type_where = facet_value constants.%C.7ac, () [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %.loc10_24.7: %type_where = converted constants.%C.7ac, %facet_value.loc10_24.3 [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_24.3: = bound_method %.loc10_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.423 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.18: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.423, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.99b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.060] +// CHECK:STDOUT: %bound_method.loc10_24.3: = bound_method %.loc10_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.18 // CHECK:STDOUT: %addr.loc10_24.3: %ptr.2b1 = addr_of %.loc10_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc10_24.3: init %empty_tuple.type = call %bound_method.loc10_24.3(%addr.loc10_24.3) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc9_24.4: = bound_method %.loc9_24.4, constants.%C.as.Destroy.impl.Op.73a -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.19: = specific_function constants.%C.as.Destroy.impl.Op.73a, @C.as.Destroy.impl.Op(constants.%int_2.ef8) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c12] -// CHECK:STDOUT: %bound_method.loc9_24.4: = bound_method %.loc9_24.4, %C.as.Destroy.impl.Op.specific_fn.19 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_24.3: init %empty_tuple.type = call %bound_method.loc10_24.3(%addr.loc10_24.3) +// CHECK:STDOUT: %facet_value.loc9_24.4: %type_where = facet_value constants.%C.681, () [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %.loc9_24.8: %type_where = converted constants.%C.681, %facet_value.loc9_24.4 [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc9_24.4: = bound_method %.loc9_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.19: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.7fe) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.781] +// CHECK:STDOUT: %bound_method.loc9_24.4: = bound_method %.loc9_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.19 // CHECK:STDOUT: %addr.loc9_24.4: %ptr.3bd = addr_of %.loc9_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc9_24.4: init %empty_tuple.type = call %bound_method.loc9_24.4(%addr.loc9_24.4) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc8_24.5: = bound_method %.loc8_24.4, constants.%C.as.Destroy.impl.Op.6d5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.20: = specific_function constants.%C.as.Destroy.impl.Op.6d5, @C.as.Destroy.impl.Op(constants.%int_1.5d2) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.52d] -// CHECK:STDOUT: %bound_method.loc8_24.5: = bound_method %.loc8_24.4, %C.as.Destroy.impl.Op.specific_fn.20 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc9_24.4: init %empty_tuple.type = call %bound_method.loc9_24.4(%addr.loc9_24.4) +// CHECK:STDOUT: %facet_value.loc8_24.5: %type_where = facet_value constants.%C.674, () [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %.loc8_24.9: %type_where = converted constants.%C.674, %facet_value.loc8_24.5 [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc8_24.5: = bound_method %.loc8_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.998 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.20: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.998, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4dd) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.179] +// CHECK:STDOUT: %bound_method.loc8_24.5: = bound_method %.loc8_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.20 // CHECK:STDOUT: %addr.loc8_24.5: %ptr.625 = addr_of %.loc8_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc8_24.5: init %empty_tuple.type = call %bound_method.loc8_24.5(%addr.loc8_24.5) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc7_24.6: = bound_method %.loc7_24.4, constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.21: = specific_function constants.%C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.f26] -// CHECK:STDOUT: %bound_method.loc7_24.6: = bound_method %.loc7_24.4, %C.as.Destroy.impl.Op.specific_fn.21 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc8_24.5: init %empty_tuple.type = call %bound_method.loc8_24.5(%addr.loc8_24.5) +// CHECK:STDOUT: %facet_value.loc7_24.6: %type_where = facet_value constants.%C.b00, () [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %.loc7_24.10: %type_where = converted constants.%C.b00, %facet_value.loc7_24.6 [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7_24.6: = bound_method %.loc7_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.050 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.21: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.e56) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2] +// CHECK:STDOUT: %bound_method.loc7_24.6: = bound_method %.loc7_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.21 // CHECK:STDOUT: %addr.loc7_24.6: %ptr.697 = addr_of %.loc7_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc7_24.6: init %empty_tuple.type = call %bound_method.loc7_24.6(%addr.loc7_24.6) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7_24.6: init %empty_tuple.type = call %bound_method.loc7_24.6(%addr.loc7_24.6) // CHECK:STDOUT: return %.loc12_35.2 to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else.loc12: @@ -1467,41 +1373,55 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.loc13_26.2: %C.c60 = bind_value %.loc13_26.1 // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call.loc13: init %D = call %bound_method.loc13_35(%.loc13_26.2) to %.loc13_35.1 // CHECK:STDOUT: %.loc13_35.2: init %D = converted %.loc13_26.1, %C.as.ImplicitAs.impl.Convert.call.loc13 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc13_24.1: = bound_method %.loc13_24.4, constants.%C.as.Destroy.impl.Op.4b4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.22: = specific_function constants.%C.as.Destroy.impl.Op.4b4, @C.as.Destroy.impl.Op(constants.%int_6.e56) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.0b3] -// CHECK:STDOUT: %bound_method.loc13_24.1: = bound_method %.loc13_24.4, %C.as.Destroy.impl.Op.specific_fn.22 +// CHECK:STDOUT: %facet_value.loc13_24.1: %type_where = facet_value constants.%C.c60, () [concrete = constants.%facet_value.14a] +// CHECK:STDOUT: %.loc13_24.5: %type_where = converted constants.%C.c60, %facet_value.loc13_24.1 [concrete = constants.%facet_value.14a] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13_24.1: = bound_method %.loc13_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.062 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.22: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.062, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.14a) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4a7] +// CHECK:STDOUT: %bound_method.loc13_24.1: = bound_method %.loc13_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.22 // CHECK:STDOUT: %addr.loc13_24.1: %ptr.b5e = addr_of %.loc13_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc13_24.1: init %empty_tuple.type = call %bound_method.loc13_24.1(%addr.loc13_24.1) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc12_24.2: = bound_method %.loc12_24.4, constants.%C.as.Destroy.impl.Op.986 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.23: = specific_function constants.%C.as.Destroy.impl.Op.986, @C.as.Destroy.impl.Op(constants.%int_5.0f6) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.8de] -// CHECK:STDOUT: %bound_method.loc12_24.2: = bound_method %.loc12_24.4, %C.as.Destroy.impl.Op.specific_fn.23 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13_24.1: init %empty_tuple.type = call %bound_method.loc13_24.1(%addr.loc13_24.1) +// CHECK:STDOUT: %facet_value.loc12_24.2: %type_where = facet_value constants.%C.f0a, () [concrete = constants.%facet_value.430] +// CHECK:STDOUT: %.loc12_24.6: %type_where = converted constants.%C.f0a, %facet_value.loc12_24.2 [concrete = constants.%facet_value.430] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc12_24.2: = bound_method %.loc12_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b39 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.23: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b39, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.430) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.b9e] +// CHECK:STDOUT: %bound_method.loc12_24.2: = bound_method %.loc12_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.23 // CHECK:STDOUT: %addr.loc12_24.2: %ptr.24c = addr_of %.loc12_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc12_24.2: init %empty_tuple.type = call %bound_method.loc12_24.2(%addr.loc12_24.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc11_24.3: = bound_method %.loc11_24.4, constants.%C.as.Destroy.impl.Op.3ab -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.24: = specific_function constants.%C.as.Destroy.impl.Op.3ab, @C.as.Destroy.impl.Op(constants.%int_4.940) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c85] -// CHECK:STDOUT: %bound_method.loc11_24.3: = bound_method %.loc11_24.4, %C.as.Destroy.impl.Op.specific_fn.24 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc12_24.2: init %empty_tuple.type = call %bound_method.loc12_24.2(%addr.loc12_24.2) +// CHECK:STDOUT: %facet_value.loc11_24.3: %type_where = facet_value constants.%C.89d, () [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %.loc11_24.7: %type_where = converted constants.%C.89d, %facet_value.loc11_24.3 [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc11_24.3: = bound_method %.loc11_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.24: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.b4c) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4d6] +// CHECK:STDOUT: %bound_method.loc11_24.3: = bound_method %.loc11_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.24 // CHECK:STDOUT: %addr.loc11_24.3: %ptr.c28b = addr_of %.loc11_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc11_24.3: init %empty_tuple.type = call %bound_method.loc11_24.3(%addr.loc11_24.3) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc10_24.4: = bound_method %.loc10_24.4, constants.%C.as.Destroy.impl.Op.3c4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.25: = specific_function constants.%C.as.Destroy.impl.Op.3c4, @C.as.Destroy.impl.Op(constants.%int_3.822) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.645] -// CHECK:STDOUT: %bound_method.loc10_24.4: = bound_method %.loc10_24.4, %C.as.Destroy.impl.Op.specific_fn.25 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc11_24.3: init %empty_tuple.type = call %bound_method.loc11_24.3(%addr.loc11_24.3) +// CHECK:STDOUT: %facet_value.loc10_24.4: %type_where = facet_value constants.%C.7ac, () [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %.loc10_24.8: %type_where = converted constants.%C.7ac, %facet_value.loc10_24.4 [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_24.4: = bound_method %.loc10_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.423 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.25: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.423, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.99b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.060] +// CHECK:STDOUT: %bound_method.loc10_24.4: = bound_method %.loc10_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.25 // CHECK:STDOUT: %addr.loc10_24.4: %ptr.2b1 = addr_of %.loc10_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc10_24.4: init %empty_tuple.type = call %bound_method.loc10_24.4(%addr.loc10_24.4) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc9_24.5: = bound_method %.loc9_24.4, constants.%C.as.Destroy.impl.Op.73a -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.26: = specific_function constants.%C.as.Destroy.impl.Op.73a, @C.as.Destroy.impl.Op(constants.%int_2.ef8) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c12] -// CHECK:STDOUT: %bound_method.loc9_24.5: = bound_method %.loc9_24.4, %C.as.Destroy.impl.Op.specific_fn.26 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_24.4: init %empty_tuple.type = call %bound_method.loc10_24.4(%addr.loc10_24.4) +// CHECK:STDOUT: %facet_value.loc9_24.5: %type_where = facet_value constants.%C.681, () [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %.loc9_24.9: %type_where = converted constants.%C.681, %facet_value.loc9_24.5 [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc9_24.5: = bound_method %.loc9_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.26: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.7fe) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.781] +// CHECK:STDOUT: %bound_method.loc9_24.5: = bound_method %.loc9_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.26 // CHECK:STDOUT: %addr.loc9_24.5: %ptr.3bd = addr_of %.loc9_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc9_24.5: init %empty_tuple.type = call %bound_method.loc9_24.5(%addr.loc9_24.5) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc8_24.6: = bound_method %.loc8_24.4, constants.%C.as.Destroy.impl.Op.6d5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.27: = specific_function constants.%C.as.Destroy.impl.Op.6d5, @C.as.Destroy.impl.Op(constants.%int_1.5d2) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.52d] -// CHECK:STDOUT: %bound_method.loc8_24.6: = bound_method %.loc8_24.4, %C.as.Destroy.impl.Op.specific_fn.27 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc9_24.5: init %empty_tuple.type = call %bound_method.loc9_24.5(%addr.loc9_24.5) +// CHECK:STDOUT: %facet_value.loc8_24.6: %type_where = facet_value constants.%C.674, () [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %.loc8_24.10: %type_where = converted constants.%C.674, %facet_value.loc8_24.6 [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc8_24.6: = bound_method %.loc8_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.998 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.27: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.998, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4dd) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.179] +// CHECK:STDOUT: %bound_method.loc8_24.6: = bound_method %.loc8_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.27 // CHECK:STDOUT: %addr.loc8_24.6: %ptr.625 = addr_of %.loc8_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc8_24.6: init %empty_tuple.type = call %bound_method.loc8_24.6(%addr.loc8_24.6) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc7_24.7: = bound_method %.loc7_24.4, constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.28: = specific_function constants.%C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.f26] -// CHECK:STDOUT: %bound_method.loc7_24.7: = bound_method %.loc7_24.4, %C.as.Destroy.impl.Op.specific_fn.28 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc8_24.6: init %empty_tuple.type = call %bound_method.loc8_24.6(%addr.loc8_24.6) +// CHECK:STDOUT: %facet_value.loc7_24.7: %type_where = facet_value constants.%C.b00, () [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %.loc7_24.11: %type_where = converted constants.%C.b00, %facet_value.loc7_24.7 [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7_24.7: = bound_method %.loc7_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.050 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.28: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.e56) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2] +// CHECK:STDOUT: %bound_method.loc7_24.7: = bound_method %.loc7_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.28 // CHECK:STDOUT: %addr.loc7_24.7: %ptr.697 = addr_of %.loc7_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc7_24.7: init %empty_tuple.type = call %bound_method.loc7_24.7(%addr.loc7_24.7) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7_24.7: init %empty_tuple.type = call %bound_method.loc7_24.7(%addr.loc7_24.7) // CHECK:STDOUT: return %.loc13_35.2 to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else.loc13: @@ -1531,46 +1451,62 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %.loc14_26.2: %C.304 = bind_value %.loc14_26.1 // CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call.loc14: init %D = call %bound_method.loc14_35(%.loc14_26.2) to %.loc14_35.1 // CHECK:STDOUT: %.loc14_35.2: init %D = converted %.loc14_26.1, %C.as.ImplicitAs.impl.Convert.call.loc14 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc14_24.1: = bound_method %.loc14_24.4, constants.%C.as.Destroy.impl.Op.3a5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.29: = specific_function constants.%C.as.Destroy.impl.Op.3a5, @C.as.Destroy.impl.Op(constants.%int_7.0b1) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.79d] -// CHECK:STDOUT: %bound_method.loc14_24.1: = bound_method %.loc14_24.4, %C.as.Destroy.impl.Op.specific_fn.29 +// CHECK:STDOUT: %facet_value.loc14_24.1: %type_where = facet_value constants.%C.304, () [concrete = constants.%facet_value.488] +// CHECK:STDOUT: %.loc14_24.5: %type_where = converted constants.%C.304, %facet_value.loc14_24.1 [concrete = constants.%facet_value.488] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc14_24.1: = bound_method %.loc14_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.28e +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.29: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.28e, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.488) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.8dc] +// CHECK:STDOUT: %bound_method.loc14_24.1: = bound_method %.loc14_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.29 // CHECK:STDOUT: %addr.loc14_24.1: %ptr.dc3 = addr_of %.loc14_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc14_24.1: init %empty_tuple.type = call %bound_method.loc14_24.1(%addr.loc14_24.1) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc13_24.2: = bound_method %.loc13_24.4, constants.%C.as.Destroy.impl.Op.4b4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.30: = specific_function constants.%C.as.Destroy.impl.Op.4b4, @C.as.Destroy.impl.Op(constants.%int_6.e56) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.0b3] -// CHECK:STDOUT: %bound_method.loc13_24.2: = bound_method %.loc13_24.4, %C.as.Destroy.impl.Op.specific_fn.30 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc14_24.1: init %empty_tuple.type = call %bound_method.loc14_24.1(%addr.loc14_24.1) +// CHECK:STDOUT: %facet_value.loc13_24.2: %type_where = facet_value constants.%C.c60, () [concrete = constants.%facet_value.14a] +// CHECK:STDOUT: %.loc13_24.6: %type_where = converted constants.%C.c60, %facet_value.loc13_24.2 [concrete = constants.%facet_value.14a] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13_24.2: = bound_method %.loc13_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.062 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.30: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.062, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.14a) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4a7] +// CHECK:STDOUT: %bound_method.loc13_24.2: = bound_method %.loc13_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.30 // CHECK:STDOUT: %addr.loc13_24.2: %ptr.b5e = addr_of %.loc13_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc13_24.2: init %empty_tuple.type = call %bound_method.loc13_24.2(%addr.loc13_24.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc12_24.3: = bound_method %.loc12_24.4, constants.%C.as.Destroy.impl.Op.986 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.31: = specific_function constants.%C.as.Destroy.impl.Op.986, @C.as.Destroy.impl.Op(constants.%int_5.0f6) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.8de] -// CHECK:STDOUT: %bound_method.loc12_24.3: = bound_method %.loc12_24.4, %C.as.Destroy.impl.Op.specific_fn.31 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13_24.2: init %empty_tuple.type = call %bound_method.loc13_24.2(%addr.loc13_24.2) +// CHECK:STDOUT: %facet_value.loc12_24.3: %type_where = facet_value constants.%C.f0a, () [concrete = constants.%facet_value.430] +// CHECK:STDOUT: %.loc12_24.7: %type_where = converted constants.%C.f0a, %facet_value.loc12_24.3 [concrete = constants.%facet_value.430] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc12_24.3: = bound_method %.loc12_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b39 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.31: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b39, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.430) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.b9e] +// CHECK:STDOUT: %bound_method.loc12_24.3: = bound_method %.loc12_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.31 // CHECK:STDOUT: %addr.loc12_24.3: %ptr.24c = addr_of %.loc12_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc12_24.3: init %empty_tuple.type = call %bound_method.loc12_24.3(%addr.loc12_24.3) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc11_24.4: = bound_method %.loc11_24.4, constants.%C.as.Destroy.impl.Op.3ab -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.32: = specific_function constants.%C.as.Destroy.impl.Op.3ab, @C.as.Destroy.impl.Op(constants.%int_4.940) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c85] -// CHECK:STDOUT: %bound_method.loc11_24.4: = bound_method %.loc11_24.4, %C.as.Destroy.impl.Op.specific_fn.32 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc12_24.3: init %empty_tuple.type = call %bound_method.loc12_24.3(%addr.loc12_24.3) +// CHECK:STDOUT: %facet_value.loc11_24.4: %type_where = facet_value constants.%C.89d, () [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %.loc11_24.8: %type_where = converted constants.%C.89d, %facet_value.loc11_24.4 [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc11_24.4: = bound_method %.loc11_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.32: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.b4c) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4d6] +// CHECK:STDOUT: %bound_method.loc11_24.4: = bound_method %.loc11_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.32 // CHECK:STDOUT: %addr.loc11_24.4: %ptr.c28b = addr_of %.loc11_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc11_24.4: init %empty_tuple.type = call %bound_method.loc11_24.4(%addr.loc11_24.4) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc10_24.5: = bound_method %.loc10_24.4, constants.%C.as.Destroy.impl.Op.3c4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.33: = specific_function constants.%C.as.Destroy.impl.Op.3c4, @C.as.Destroy.impl.Op(constants.%int_3.822) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.645] -// CHECK:STDOUT: %bound_method.loc10_24.5: = bound_method %.loc10_24.4, %C.as.Destroy.impl.Op.specific_fn.33 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc11_24.4: init %empty_tuple.type = call %bound_method.loc11_24.4(%addr.loc11_24.4) +// CHECK:STDOUT: %facet_value.loc10_24.5: %type_where = facet_value constants.%C.7ac, () [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %.loc10_24.9: %type_where = converted constants.%C.7ac, %facet_value.loc10_24.5 [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_24.5: = bound_method %.loc10_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.423 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.33: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.423, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.99b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.060] +// CHECK:STDOUT: %bound_method.loc10_24.5: = bound_method %.loc10_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.33 // CHECK:STDOUT: %addr.loc10_24.5: %ptr.2b1 = addr_of %.loc10_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc10_24.5: init %empty_tuple.type = call %bound_method.loc10_24.5(%addr.loc10_24.5) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc9_24.6: = bound_method %.loc9_24.4, constants.%C.as.Destroy.impl.Op.73a -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.34: = specific_function constants.%C.as.Destroy.impl.Op.73a, @C.as.Destroy.impl.Op(constants.%int_2.ef8) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c12] -// CHECK:STDOUT: %bound_method.loc9_24.6: = bound_method %.loc9_24.4, %C.as.Destroy.impl.Op.specific_fn.34 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_24.5: init %empty_tuple.type = call %bound_method.loc10_24.5(%addr.loc10_24.5) +// CHECK:STDOUT: %facet_value.loc9_24.6: %type_where = facet_value constants.%C.681, () [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %.loc9_24.10: %type_where = converted constants.%C.681, %facet_value.loc9_24.6 [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc9_24.6: = bound_method %.loc9_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.34: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.7fe) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.781] +// CHECK:STDOUT: %bound_method.loc9_24.6: = bound_method %.loc9_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.34 // CHECK:STDOUT: %addr.loc9_24.6: %ptr.3bd = addr_of %.loc9_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc9_24.6: init %empty_tuple.type = call %bound_method.loc9_24.6(%addr.loc9_24.6) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc8_24.7: = bound_method %.loc8_24.4, constants.%C.as.Destroy.impl.Op.6d5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.35: = specific_function constants.%C.as.Destroy.impl.Op.6d5, @C.as.Destroy.impl.Op(constants.%int_1.5d2) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.52d] -// CHECK:STDOUT: %bound_method.loc8_24.7: = bound_method %.loc8_24.4, %C.as.Destroy.impl.Op.specific_fn.35 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc9_24.6: init %empty_tuple.type = call %bound_method.loc9_24.6(%addr.loc9_24.6) +// CHECK:STDOUT: %facet_value.loc8_24.7: %type_where = facet_value constants.%C.674, () [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %.loc8_24.11: %type_where = converted constants.%C.674, %facet_value.loc8_24.7 [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc8_24.7: = bound_method %.loc8_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.998 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.35: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.998, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4dd) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.179] +// CHECK:STDOUT: %bound_method.loc8_24.7: = bound_method %.loc8_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.35 // CHECK:STDOUT: %addr.loc8_24.7: %ptr.625 = addr_of %.loc8_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc8_24.7: init %empty_tuple.type = call %bound_method.loc8_24.7(%addr.loc8_24.7) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc7_24.8: = bound_method %.loc7_24.4, constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.36: = specific_function constants.%C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.f26] -// CHECK:STDOUT: %bound_method.loc7_24.8: = bound_method %.loc7_24.4, %C.as.Destroy.impl.Op.specific_fn.36 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc8_24.7: init %empty_tuple.type = call %bound_method.loc8_24.7(%addr.loc8_24.7) +// CHECK:STDOUT: %facet_value.loc7_24.8: %type_where = facet_value constants.%C.b00, () [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %.loc7_24.12: %type_where = converted constants.%C.b00, %facet_value.loc7_24.8 [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7_24.8: = bound_method %.loc7_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.050 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.36: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.e56) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2] +// CHECK:STDOUT: %bound_method.loc7_24.8: = bound_method %.loc7_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.36 // CHECK:STDOUT: %addr.loc7_24.8: %ptr.697 = addr_of %.loc7_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc7_24.8: init %empty_tuple.type = call %bound_method.loc7_24.8(%addr.loc7_24.8) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7_24.8: init %empty_tuple.type = call %bound_method.loc7_24.8(%addr.loc7_24.8) // CHECK:STDOUT: return %.loc14_35.2 to %return // CHECK:STDOUT: // CHECK:STDOUT: !if.else.loc14: @@ -1578,62 +1514,67 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %Make.ref: %Make.type = name_ref Make, imports.%P.Make [concrete = constants.%Make] // CHECK:STDOUT: %.loc6_15: ref %D = splice_block %return {} // CHECK:STDOUT: %Make.call: init %D = call %Make.ref() to %.loc6_15 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc14_24.2: = bound_method %.loc14_24.4, constants.%C.as.Destroy.impl.Op.3a5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.37: = specific_function constants.%C.as.Destroy.impl.Op.3a5, @C.as.Destroy.impl.Op(constants.%int_7.0b1) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.79d] -// CHECK:STDOUT: %bound_method.loc14_24.2: = bound_method %.loc14_24.4, %C.as.Destroy.impl.Op.specific_fn.37 +// CHECK:STDOUT: %facet_value.loc14_24.2: %type_where = facet_value constants.%C.304, () [concrete = constants.%facet_value.488] +// CHECK:STDOUT: %.loc14_24.6: %type_where = converted constants.%C.304, %facet_value.loc14_24.2 [concrete = constants.%facet_value.488] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc14_24.2: = bound_method %.loc14_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.28e +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.37: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.28e, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.488) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.8dc] +// CHECK:STDOUT: %bound_method.loc14_24.2: = bound_method %.loc14_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.37 // CHECK:STDOUT: %addr.loc14_24.2: %ptr.dc3 = addr_of %.loc14_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc14_24.2: init %empty_tuple.type = call %bound_method.loc14_24.2(%addr.loc14_24.2) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc13_24.3: = bound_method %.loc13_24.4, constants.%C.as.Destroy.impl.Op.4b4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.38: = specific_function constants.%C.as.Destroy.impl.Op.4b4, @C.as.Destroy.impl.Op(constants.%int_6.e56) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.0b3] -// CHECK:STDOUT: %bound_method.loc13_24.3: = bound_method %.loc13_24.4, %C.as.Destroy.impl.Op.specific_fn.38 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc14_24.2: init %empty_tuple.type = call %bound_method.loc14_24.2(%addr.loc14_24.2) +// CHECK:STDOUT: %facet_value.loc13_24.3: %type_where = facet_value constants.%C.c60, () [concrete = constants.%facet_value.14a] +// CHECK:STDOUT: %.loc13_24.7: %type_where = converted constants.%C.c60, %facet_value.loc13_24.3 [concrete = constants.%facet_value.14a] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc13_24.3: = bound_method %.loc13_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.062 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.38: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.062, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.14a) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4a7] +// CHECK:STDOUT: %bound_method.loc13_24.3: = bound_method %.loc13_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.38 // CHECK:STDOUT: %addr.loc13_24.3: %ptr.b5e = addr_of %.loc13_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc13_24.3: init %empty_tuple.type = call %bound_method.loc13_24.3(%addr.loc13_24.3) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc12_24.4: = bound_method %.loc12_24.4, constants.%C.as.Destroy.impl.Op.986 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.39: = specific_function constants.%C.as.Destroy.impl.Op.986, @C.as.Destroy.impl.Op(constants.%int_5.0f6) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.8de] -// CHECK:STDOUT: %bound_method.loc12_24.4: = bound_method %.loc12_24.4, %C.as.Destroy.impl.Op.specific_fn.39 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc13_24.3: init %empty_tuple.type = call %bound_method.loc13_24.3(%addr.loc13_24.3) +// CHECK:STDOUT: %facet_value.loc12_24.4: %type_where = facet_value constants.%C.f0a, () [concrete = constants.%facet_value.430] +// CHECK:STDOUT: %.loc12_24.8: %type_where = converted constants.%C.f0a, %facet_value.loc12_24.4 [concrete = constants.%facet_value.430] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc12_24.4: = bound_method %.loc12_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b39 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.39: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b39, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.430) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.b9e] +// CHECK:STDOUT: %bound_method.loc12_24.4: = bound_method %.loc12_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.39 // CHECK:STDOUT: %addr.loc12_24.4: %ptr.24c = addr_of %.loc12_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc12_24.4: init %empty_tuple.type = call %bound_method.loc12_24.4(%addr.loc12_24.4) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc11_24.5: = bound_method %.loc11_24.4, constants.%C.as.Destroy.impl.Op.3ab -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.40: = specific_function constants.%C.as.Destroy.impl.Op.3ab, @C.as.Destroy.impl.Op(constants.%int_4.940) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c85] -// CHECK:STDOUT: %bound_method.loc11_24.5: = bound_method %.loc11_24.4, %C.as.Destroy.impl.Op.specific_fn.40 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc12_24.4: init %empty_tuple.type = call %bound_method.loc12_24.4(%addr.loc12_24.4) +// CHECK:STDOUT: %facet_value.loc11_24.5: %type_where = facet_value constants.%C.89d, () [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %.loc11_24.9: %type_where = converted constants.%C.89d, %facet_value.loc11_24.5 [concrete = constants.%facet_value.b4c] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc11_24.5: = bound_method %.loc11_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.40: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.b4d, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.b4c) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.4d6] +// CHECK:STDOUT: %bound_method.loc11_24.5: = bound_method %.loc11_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.40 // CHECK:STDOUT: %addr.loc11_24.5: %ptr.c28b = addr_of %.loc11_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc11_24.5: init %empty_tuple.type = call %bound_method.loc11_24.5(%addr.loc11_24.5) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc10_24.6: = bound_method %.loc10_24.4, constants.%C.as.Destroy.impl.Op.3c4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.41: = specific_function constants.%C.as.Destroy.impl.Op.3c4, @C.as.Destroy.impl.Op(constants.%int_3.822) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.645] -// CHECK:STDOUT: %bound_method.loc10_24.6: = bound_method %.loc10_24.4, %C.as.Destroy.impl.Op.specific_fn.41 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc11_24.5: init %empty_tuple.type = call %bound_method.loc11_24.5(%addr.loc11_24.5) +// CHECK:STDOUT: %facet_value.loc10_24.6: %type_where = facet_value constants.%C.7ac, () [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %.loc10_24.10: %type_where = converted constants.%C.7ac, %facet_value.loc10_24.6 [concrete = constants.%facet_value.99b] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc10_24.6: = bound_method %.loc10_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.423 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.41: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.423, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.99b) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.060] +// CHECK:STDOUT: %bound_method.loc10_24.6: = bound_method %.loc10_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.41 // CHECK:STDOUT: %addr.loc10_24.6: %ptr.2b1 = addr_of %.loc10_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc10_24.6: init %empty_tuple.type = call %bound_method.loc10_24.6(%addr.loc10_24.6) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc9_24.7: = bound_method %.loc9_24.4, constants.%C.as.Destroy.impl.Op.73a -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.42: = specific_function constants.%C.as.Destroy.impl.Op.73a, @C.as.Destroy.impl.Op(constants.%int_2.ef8) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.c12] -// CHECK:STDOUT: %bound_method.loc9_24.7: = bound_method %.loc9_24.4, %C.as.Destroy.impl.Op.specific_fn.42 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc10_24.6: init %empty_tuple.type = call %bound_method.loc10_24.6(%addr.loc10_24.6) +// CHECK:STDOUT: %facet_value.loc9_24.7: %type_where = facet_value constants.%C.681, () [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %.loc9_24.11: %type_where = converted constants.%C.681, %facet_value.loc9_24.7 [concrete = constants.%facet_value.7fe] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc9_24.7: = bound_method %.loc9_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.42: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.aa7, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.7fe) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.781] +// CHECK:STDOUT: %bound_method.loc9_24.7: = bound_method %.loc9_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.42 // CHECK:STDOUT: %addr.loc9_24.7: %ptr.3bd = addr_of %.loc9_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc9_24.7: init %empty_tuple.type = call %bound_method.loc9_24.7(%addr.loc9_24.7) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc8_24.8: = bound_method %.loc8_24.4, constants.%C.as.Destroy.impl.Op.6d5 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.43: = specific_function constants.%C.as.Destroy.impl.Op.6d5, @C.as.Destroy.impl.Op(constants.%int_1.5d2) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.52d] -// CHECK:STDOUT: %bound_method.loc8_24.8: = bound_method %.loc8_24.4, %C.as.Destroy.impl.Op.specific_fn.43 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc9_24.7: init %empty_tuple.type = call %bound_method.loc9_24.7(%addr.loc9_24.7) +// CHECK:STDOUT: %facet_value.loc8_24.8: %type_where = facet_value constants.%C.674, () [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %.loc8_24.12: %type_where = converted constants.%C.674, %facet_value.loc8_24.8 [concrete = constants.%facet_value.4dd] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc8_24.8: = bound_method %.loc8_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.998 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.43: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.998, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.4dd) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.179] +// CHECK:STDOUT: %bound_method.loc8_24.8: = bound_method %.loc8_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.43 // CHECK:STDOUT: %addr.loc8_24.8: %ptr.625 = addr_of %.loc8_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc8_24.8: init %empty_tuple.type = call %bound_method.loc8_24.8(%addr.loc8_24.8) -// CHECK:STDOUT: %C.as.Destroy.impl.Op.bound.loc7_24.9: = bound_method %.loc7_24.4, constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.specific_fn.44: = specific_function constants.%C.as.Destroy.impl.Op.f24, @C.as.Destroy.impl.Op(constants.%int_0.6a9) [concrete = constants.%C.as.Destroy.impl.Op.specific_fn.f26] -// CHECK:STDOUT: %bound_method.loc7_24.9: = bound_method %.loc7_24.4, %C.as.Destroy.impl.Op.specific_fn.44 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc8_24.8: init %empty_tuple.type = call %bound_method.loc8_24.8(%addr.loc8_24.8) +// CHECK:STDOUT: %facet_value.loc7_24.9: %type_where = facet_value constants.%C.b00, () [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %.loc7_24.13: %type_where = converted constants.%C.b00, %facet_value.loc7_24.9 [concrete = constants.%facet_value.e56] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc7_24.9: = bound_method %.loc7_24.4, constants.%AggregateT.as_type.as.Destroy.impl.Op.050 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.44: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.050, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value.e56) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn.5c2] +// CHECK:STDOUT: %bound_method.loc7_24.9: = bound_method %.loc7_24.4, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.44 // CHECK:STDOUT: %addr.loc7_24.9: %ptr.697 = addr_of %.loc7_24.4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op.call.loc7_24.9: init %empty_tuple.type = call %bound_method.loc7_24.9(%addr.loc7_24.9) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc7_24.9: init %empty_tuple.type = call %bound_method.loc7_24.9(%addr.loc7_24.9) // CHECK:STDOUT: return %Make.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.ImplicitAs.impl.Convert.1 [from "library.carbon"]; // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @C.as.Destroy.impl.Op(imports.%P.import_ref.1b7f13.3: %i32) [from "library.carbon"] { -// CHECK:STDOUT: %N: %i32 = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.51e)] -// CHECK:STDOUT: %C: type = class_type @C, @C(%N) [symbolic = %C (constants.%C.17a)] -// CHECK:STDOUT: %ptr: type = ptr_type %C [symbolic = %ptr (constants.%ptr.9e5)] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [symbolic = %pattern_type (constants.%pattern_type.572)] -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: -// CHECK:STDOUT: fn = "no_op"; -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.ImplicitAs.impl.Convert.2 [from "library.carbon"]; // CHECK:STDOUT: // CHECK:STDOUT: fn @C.as.ImplicitAs.impl.Convert.3 [from "library.carbon"]; @@ -1702,152 +1643,3 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %C => constants.%C.17a -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.81b -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%N.51e) { -// CHECK:STDOUT: %N => constants.%N.51e -// CHECK:STDOUT: %C => constants.%C.17a -// CHECK:STDOUT: %ptr => constants.%ptr.9e5 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.572 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%int_0.6a9) { -// CHECK:STDOUT: %N => constants.%int_0.6a9 -// CHECK:STDOUT: %C => constants.%C.b00 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.7a6 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.a79 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.f24 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%int_0.6a9) { -// CHECK:STDOUT: %N => constants.%int_0.6a9 -// CHECK:STDOUT: %C => constants.%C.b00 -// CHECK:STDOUT: %ptr => constants.%ptr.697 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7d1 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%int_1.5d2) { -// CHECK:STDOUT: %N => constants.%int_1.5d2 -// CHECK:STDOUT: %C => constants.%C.674 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.c26 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.5a4 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.6d5 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%int_1.5d2) { -// CHECK:STDOUT: %N => constants.%int_1.5d2 -// CHECK:STDOUT: %C => constants.%C.674 -// CHECK:STDOUT: %ptr => constants.%ptr.625 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.559 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%int_2.ef8) { -// CHECK:STDOUT: %N => constants.%int_2.ef8 -// CHECK:STDOUT: %C => constants.%C.681 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.a29 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.10b -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.73a -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%int_2.ef8) { -// CHECK:STDOUT: %N => constants.%int_2.ef8 -// CHECK:STDOUT: %C => constants.%C.681 -// CHECK:STDOUT: %ptr => constants.%ptr.3bd -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b50 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%int_3.822) { -// CHECK:STDOUT: %N => constants.%int_3.822 -// CHECK:STDOUT: %C => constants.%C.7ac -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.73b -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.d33 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.3c4 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%int_3.822) { -// CHECK:STDOUT: %N => constants.%int_3.822 -// CHECK:STDOUT: %C => constants.%C.7ac -// CHECK:STDOUT: %ptr => constants.%ptr.2b1 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9f4 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%int_4.940) { -// CHECK:STDOUT: %N => constants.%int_4.940 -// CHECK:STDOUT: %C => constants.%C.89d -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.3df -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.a16 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.3ab -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%int_4.940) { -// CHECK:STDOUT: %N => constants.%int_4.940 -// CHECK:STDOUT: %C => constants.%C.89d -// CHECK:STDOUT: %ptr => constants.%ptr.c28b -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a33 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%int_5.0f6) { -// CHECK:STDOUT: %N => constants.%int_5.0f6 -// CHECK:STDOUT: %C => constants.%C.f0a -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.bce -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.8a2 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.986 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%int_5.0f6) { -// CHECK:STDOUT: %N => constants.%int_5.0f6 -// CHECK:STDOUT: %C => constants.%C.f0a -// CHECK:STDOUT: %ptr => constants.%ptr.24c -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.37e -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%int_6.e56) { -// CHECK:STDOUT: %N => constants.%int_6.e56 -// CHECK:STDOUT: %C => constants.%C.c60 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.3c1 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.0c8 -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.4b4 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%int_6.e56) { -// CHECK:STDOUT: %N => constants.%int_6.e56 -// CHECK:STDOUT: %C => constants.%C.c60 -// CHECK:STDOUT: %ptr => constants.%ptr.b5e -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.667 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl(constants.%int_7.0b1) { -// CHECK:STDOUT: %N => constants.%int_7.0b1 -// CHECK:STDOUT: %C => constants.%C.304 -// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.390 -// CHECK:STDOUT: -// CHECK:STDOUT: !definition: -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type => constants.%C.as.Destroy.impl.Op.type.17f -// CHECK:STDOUT: %C.as.Destroy.impl.Op => constants.%C.as.Destroy.impl.Op.3a5 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @C.as.Destroy.impl.Op(constants.%int_7.0b1) { -// CHECK:STDOUT: %N => constants.%int_7.0b1 -// CHECK:STDOUT: %C => constants.%C.304 -// CHECK:STDOUT: %ptr => constants.%ptr.dc3 -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.12a -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/return/returned_var.carbon b/toolchain/check/testdata/return/returned_var.carbon index ccd47ca67c4b..5508ccea1e10 100644 --- a/toolchain/check/testdata/return/returned_var.carbon +++ b/toolchain/check/testdata/return/returned_var.carbon @@ -37,13 +37,6 @@ fn G() -> i32 { // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness.071: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] @@ -79,25 +72,28 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.931: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0f0 [concrete] // CHECK:STDOUT: %bound_method.c25: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { // CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs +// CHECK:STDOUT: .Destroy = %Core.Destroy // CHECK:STDOUT: import Core//prelude // 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: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.ee7: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.340) = import_ref Core//prelude/parts/int, loc23_39, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.1c0)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.9e9 = impl_witness_table (%Core.import_ref.ee7), @Core.IntLiteral.as.ImplicitAs.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 { @@ -128,22 +124,6 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc15: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -151,10 +131,6 @@ fn G() -> i32 { // CHECK:STDOUT: %int_32.loc17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc17: %C.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness.071] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.a.b.501 [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -164,8 +140,6 @@ fn G() -> i32 { // CHECK:STDOUT: .b = %.loc17 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -212,19 +186,21 @@ fn G() -> i32 { // 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] // CHECK:STDOUT: %bound_method.loc26_12.2: = bound_method %int_0, %specific_fn [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc26_12.2(%int_0) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc26_12: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %result.var, %.loc26_12 +// CHECK:STDOUT: %.loc26_12.1: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %result.var, %.loc26_12.1 // CHECK:STDOUT: %.loc26_24: type = splice_block %i32.loc26 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc26: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc26: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %result: ref %i32 = bind_name result, %result.var // CHECK:STDOUT: %.loc26_16: %i32 = bind_value %result -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound: = bound_method %result.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc26_12.3: = bound_method %result.var, %Int.as.Destroy.impl.Op.specific_fn +// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc26_12.2: %type_where = converted constants.%i32, %facet_value [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound: = bound_method %result.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc26_12.3: = bound_method %result.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn // CHECK:STDOUT: %addr: %ptr.235 = addr_of %result.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc26_12.3(%addr) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc26_12.3(%addr) // CHECK:STDOUT: return %.loc26_16 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/return/returned_var_scope.carbon b/toolchain/check/testdata/return/returned_var_scope.carbon index 14a7409323c7..b98d0b87a36f 100644 --- a/toolchain/check/testdata/return/returned_var_scope.carbon +++ b/toolchain/check/testdata/return/returned_var_scope.carbon @@ -65,10 +65,12 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %bound_method.c11: = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.type.4f9: type = fn_type @Int.as.Destroy.impl.Op, @Int.as.Destroy.impl(%int_32) [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.796: %Int.as.Destroy.impl.Op.type.4f9 = struct_value () [concrete] +// CHECK:STDOUT: %type_where: type = facet_type > [concrete] +// CHECK:STDOUT: %facet_value: %type_where = facet_value %i32, () [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3: type = fn_type @AggregateT.as_type.as.Destroy.impl.Op, @AggregateT.as_type.as.Destroy.impl(%facet_value) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.cad: %AggregateT.as_type.as.Destroy.impl.Op.type.cb3 = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn: = specific_function %Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(%int_32) [concrete] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn: = specific_function %AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(%facet_value) [concrete] // 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] @@ -146,8 +148,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %specific_fn.loc17: = specific_function %impl.elem0.loc17, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc17_14.2: = bound_method %int_0.loc17, %specific_fn.loc17 [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc17: init %i32 = call %bound_method.loc17_14.2(%int_0.loc17) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc17_14: init %i32 = converted %int_0.loc17, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc17 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %v.var, %.loc17_14 +// CHECK:STDOUT: %.loc17_14.1: init %i32 = converted %int_0.loc17, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc17 [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %v.var, %.loc17_14.1 // CHECK:STDOUT: %.loc17_21: type = splice_block %i32.loc17 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -171,8 +173,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %specific_fn.loc20: = specific_function %impl.elem0.loc20, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc20_14.2: = bound_method %int_1, %specific_fn.loc20 [concrete = constants.%bound_method.c11] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc20: init %i32 = call %bound_method.loc20_14.2(%int_1) [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: %.loc20_14: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc20 [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: assign %w.var, %.loc20_14 +// CHECK:STDOUT: %.loc20_14.1: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc20 [concrete = constants.%int_1.5d2] +// CHECK:STDOUT: assign %w.var, %.loc20_14.1 // CHECK:STDOUT: %.loc20_21: type = splice_block %i32.loc20 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc20: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc20: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -188,16 +190,20 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %bound_method.loc22_11.2: = bound_method %int_0.loc22, %specific_fn.loc22 [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22: init %i32 = call %bound_method.loc22_11.2(%int_0.loc22) [concrete = constants.%int_0.6a9] // CHECK:STDOUT: %.loc22: init %i32 = converted %int_0.loc22, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc20: = bound_method %w.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc20_14.3: = bound_method %w.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc20: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc20_14.2: %type_where = converted constants.%i32, %facet_value.loc20 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc20: = bound_method %w.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc20_14.3: = bound_method %w.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc20: %ptr.235 = addr_of %w.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc20: init %empty_tuple.type = call %bound_method.loc20_14.3(%addr.loc20) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc17: = bound_method %v.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc17_14.3: = bound_method %v.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc20: init %empty_tuple.type = call %bound_method.loc20_14.3(%addr.loc20) +// CHECK:STDOUT: %facet_value.loc17: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc17_14.2: %type_where = converted constants.%i32, %facet_value.loc17 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc17: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc17_14.3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc17: %ptr.235 = addr_of %v.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc17: init %empty_tuple.type = call %bound_method.loc17_14.3(%addr.loc17) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc17: init %empty_tuple.type = call %bound_method.loc17_14.3(%addr.loc17) // CHECK:STDOUT: return %.loc22 to %return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -218,19 +224,21 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %specific_fn.loc27: = specific_function %impl.elem0.loc27, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc27_14.2: = bound_method %int_0, %specific_fn.loc27 [concrete = constants.%bound_method.c25] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc27: init %i32 = call %bound_method.loc27_14.2(%int_0) [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: %.loc27_14: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc27 [concrete = constants.%int_0.6a9] -// CHECK:STDOUT: assign %v.var, %.loc27_14 +// CHECK:STDOUT: %.loc27_14.1: init %i32 = converted %int_0, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc27 [concrete = constants.%int_0.6a9] +// CHECK:STDOUT: assign %v.var, %.loc27_14.1 // CHECK:STDOUT: %.loc27_21: type = splice_block %i32.loc27 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc27: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %i32 = bind_name v, %v.var // CHECK:STDOUT: %.loc27_18: %i32 = bind_value %v -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc27_14.1: = bound_method %v.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc27_14.3: = bound_method %v.var, %Int.as.Destroy.impl.Op.specific_fn.1 +// CHECK:STDOUT: %facet_value.loc27_14.1: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc27_14.2: %type_where = converted constants.%i32, %facet_value.loc27_14.1 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc27_14.1: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc27_14.3: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.1 // CHECK:STDOUT: %addr.loc27_14.1: %ptr.235 = addr_of %v.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc27_14.1: init %empty_tuple.type = call %bound_method.loc27_14.3(%addr.loc27_14.1) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc27_14.1: init %empty_tuple.type = call %bound_method.loc27_14.3(%addr.loc27_14.1) // CHECK:STDOUT: return %.loc27_18 // CHECK:STDOUT: // CHECK:STDOUT: !if.else: @@ -245,24 +253,28 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %specific_fn.loc30: = specific_function %impl.elem0.loc30, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc30_12.2: = bound_method %int_1, %specific_fn.loc30 [concrete = constants.%bound_method.c11] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc30: init %i32 = call %bound_method.loc30_12.2(%int_1) [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: %.loc30_12: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc30 [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: assign %w.var, %.loc30_12 +// CHECK:STDOUT: %.loc30_12.1: init %i32 = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc30 [concrete = constants.%int_1.5d2] +// CHECK:STDOUT: assign %w.var, %.loc30_12.1 // CHECK:STDOUT: %.loc30_19: type = splice_block %i32.loc30 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc30: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc30: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %w: ref %i32 = bind_name w, %w.var // CHECK:STDOUT: %.loc30_16: %i32 = bind_value %w -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc30: = bound_method %w.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc30_12.3: = bound_method %w.var, %Int.as.Destroy.impl.Op.specific_fn.2 +// CHECK:STDOUT: %facet_value.loc30: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc30_12.2: %type_where = converted constants.%i32, %facet_value.loc30 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc30: = bound_method %w.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc30_12.3: = bound_method %w.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.2 // CHECK:STDOUT: %addr.loc30: %ptr.235 = addr_of %w.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %bound_method.loc30_12.3(%addr.loc30) -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.bound.loc27_14.2: = bound_method %v.var, constants.%Int.as.Destroy.impl.Op.796 -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%Int.as.Destroy.impl.Op.796, @Int.as.Destroy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Destroy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc27_14.4: = bound_method %v.var, %Int.as.Destroy.impl.Op.specific_fn.3 +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %bound_method.loc30_12.3(%addr.loc30) +// CHECK:STDOUT: %facet_value.loc27_14.2: %type_where = facet_value constants.%i32, () [concrete = constants.%facet_value] +// CHECK:STDOUT: %.loc27_14.3: %type_where = converted constants.%i32, %facet_value.loc27_14.2 [concrete = constants.%facet_value] +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.bound.loc27_14.2: = bound_method %v.var, constants.%AggregateT.as_type.as.Destroy.impl.Op.cad +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3: = specific_function constants.%AggregateT.as_type.as.Destroy.impl.Op.cad, @AggregateT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%AggregateT.as_type.as.Destroy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc27_14.4: = bound_method %v.var, %AggregateT.as_type.as.Destroy.impl.Op.specific_fn.3 // CHECK:STDOUT: %addr.loc27_14.2: %ptr.235 = addr_of %v.var -// CHECK:STDOUT: %Int.as.Destroy.impl.Op.call.loc27_14.2: init %empty_tuple.type = call %bound_method.loc27_14.4(%addr.loc27_14.2) +// CHECK:STDOUT: %AggregateT.as_type.as.Destroy.impl.Op.call.loc27_14.2: init %empty_tuple.type = call %bound_method.loc27_14.4(%addr.loc27_14.2) // CHECK:STDOUT: return %.loc30_16 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/struct/import.carbon b/toolchain/check/testdata/struct/import.carbon index 76022b271adb..405352a10462 100644 --- a/toolchain/check/testdata/struct/import.carbon +++ b/toolchain/check/testdata/struct/import.carbon @@ -88,9 +88,6 @@ fn F() -> {.x: i32} { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.f13: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ec = struct_value () [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %struct_type.a.b.5ca: type = struct_type {.a: %i32, .b: %i32} [concrete] -// CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] -// CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %pattern_type.b54: type = pattern_type %struct_type.a [concrete] // CHECK:STDOUT: %.c27: ref %i32 = struct_access imports.%a_ref.var, element0 [concrete] @@ -118,6 +115,9 @@ fn F() -> {.x: i32} { // CHECK:STDOUT: %tuple.elem0.aa5: ref %i32 = tuple_access %.e5f, element0 [concrete] // CHECK:STDOUT: %.dfe: ref %i32 = struct_access imports.%b_ref.var, element1 [concrete] // CHECK:STDOUT: %.607: ref %i32 = struct_access file.%b.var, element1 [concrete] +// CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] +// CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] +// CHECK:STDOUT: %struct_type.a.b.5ca: type = struct_type {.a: %i32, .b: %i32} [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] diff --git a/toolchain/check/testdata/tuple/import.carbon b/toolchain/check/testdata/tuple/import.carbon index 330c147cdda3..8d462b3a2f1f 100644 --- a/toolchain/check/testdata/tuple/import.carbon +++ b/toolchain/check/testdata/tuple/import.carbon @@ -90,9 +90,6 @@ fn F() -> (i32,) { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.f13: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ec = struct_value () [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %tuple.type.c2c: type = tuple_type (%i32, %i32) [concrete] -// CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] -// CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.dd4: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %pattern_type.2e8: type = pattern_type %tuple.type.dd4 [concrete] @@ -111,6 +108,7 @@ fn F() -> (i32,) { // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.58c: type = tuple_type (%tuple.type.8c7, %tuple.type.24b) [concrete] // CHECK:STDOUT: %tuple.type.154: type = tuple_type (%tuple.type.dd4, %i32) [concrete] +// CHECK:STDOUT: %tuple.type.c2c: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.cfa: type = tuple_type (%tuple.type.154, %tuple.type.c2c) [concrete] // CHECK:STDOUT: %pattern_type.ab9: type = pattern_type %tuple.type.cfa [concrete] // CHECK:STDOUT: %tuple.elem0.693: ref %tuple.type.154 = tuple_access imports.%b_ref.var, element0 [concrete] @@ -126,6 +124,8 @@ fn F() -> (i32,) { // CHECK:STDOUT: %tuple.elem0.790: ref %i32 = tuple_access %tuple.elem1.4f3, element0 [concrete] // CHECK:STDOUT: %tuple.elem1.282: ref %i32 = tuple_access %tuple.elem1.92b, element1 [concrete] // CHECK:STDOUT: %tuple.elem1.822: ref %i32 = tuple_access %tuple.elem1.4f3, element1 [concrete] +// CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] +// CHECK:STDOUT: %C.generic: %C.type = struct_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: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] diff --git a/toolchain/check/testdata/var/var_pattern.carbon b/toolchain/check/testdata/var/var_pattern.carbon index 2a6f2d561b98..979307f1a0d8 100644 --- a/toolchain/check/testdata/var/var_pattern.carbon +++ b/toolchain/check/testdata/var/var_pattern.carbon @@ -855,27 +855,18 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete] // CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness @C.%Destroy.impl_witness_table [concrete] -// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] -// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op.type: type = fn_type @C.as.Destroy.impl.Op [concrete] -// CHECK:STDOUT: %C.as.Destroy.impl.Op: %C.as.Destroy.impl.Op.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: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// 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: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -887,36 +878,16 @@ fn G() { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: impl @C.as.Destroy.impl: @C.%Self.ref as constants.%Destroy.type { -// CHECK:STDOUT: %C.as.Destroy.impl.Op.decl: %C.as.Destroy.impl.Op.type = fn_decl @C.as.Destroy.impl.Op [concrete = constants.%C.as.Destroy.impl.Op] { -// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %.loc4: %pattern_type.f6d = addr_pattern %self.param_patt [concrete] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: %self: %ptr.019 = bind_name self, %self.param -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Op = %C.as.Destroy.impl.Op.decl -// CHECK:STDOUT: witness = @C.%Destroy.impl_witness -// CHECK:STDOUT: } -// 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.patt: %pattern_type.c48 = binding_pattern self [concrete] -// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = ref_param_pattern %self.patt, call_param0 [concrete] -// CHECK:STDOUT: %self.var_patt: %pattern_type.c48 = var_pattern %self.param_patt [concrete] +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self [concrete] +// CHECK:STDOUT: %self.param_patt: %pattern_type = ref_param_pattern %self.patt, call_param0 [concrete] +// CHECK:STDOUT: %self.var_patt: %pattern_type = var_pattern %self.param_patt [concrete] // 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] // CHECK:STDOUT: %self: ref %C = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] -// CHECK:STDOUT: impl_decl @C.as.Destroy.impl [concrete] {} {} -// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (@C.as.Destroy.impl.%C.as.Destroy.impl.Op.decl), @C.as.Destroy.impl [concrete] -// CHECK:STDOUT: %Destroy.impl_witness: = impl_witness %Destroy.impl_witness_table [concrete = constants.%Destroy.impl_witness] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -927,8 +898,6 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: fn @C.F(%self.param: %C); // CHECK:STDOUT: -// CHECK:STDOUT: fn @C.as.Destroy.impl.Op(%self.param: %ptr.019) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- nested_match.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/driver/compile_subcommand.cpp b/toolchain/driver/compile_subcommand.cpp index edf78a481054..a7a725c2bb91 100644 --- a/toolchain/driver/compile_subcommand.cpp +++ b/toolchain/driver/compile_subcommand.cpp @@ -290,19 +290,6 @@ Whether to use the implicit prelude import. Enabled by default. arg_b.Default(true); arg_b.Set(&prelude_import); }); - b.AddFlag( - { - .name = "gen-implicit-type-impls", - .help = R"""( -Whether to generate standard `impl`s for types, such as `Core.Destroy`. This -only controls generation of the `impl`; code which expects the `impl` is -expected to fail. Enabled by default. -)""", - }, - [&](auto& arg_b) { - arg_b.Default(true); - arg_b.Set(&gen_implicit_type_impls); - }); b.AddFlag( { .name = "custom-core", @@ -1053,7 +1040,6 @@ auto CompileSubcommand::Run(DriverEnv& driver_env) -> DriverResult { CARBON_VLOG_TO(driver_env.vlog_stream, "*** Check::CheckParseTrees ***\n"); Check::CheckParseTreesOptions options; options.prelude_import = options_.prelude_import; - options.gen_implicit_type_impls = options_.gen_implicit_type_impls; options.vlog_stream = driver_env.vlog_stream; options.fuzzing = driver_env.fuzzing; if (options.vlog_stream || options_.dump_sem_ir || options_.dump_cpp_ast || diff --git a/toolchain/driver/compile_subcommand.h b/toolchain/driver/compile_subcommand.h index ff820acf01cb..a2e459da2259 100644 --- a/toolchain/driver/compile_subcommand.h +++ b/toolchain/driver/compile_subcommand.h @@ -61,7 +61,6 @@ struct CompileOptions { bool preorder_parse_tree = false; bool builtin_sem_ir = false; bool prelude_import = false; - bool gen_implicit_type_impls = false; bool include_debug_info = true; bool run_llvm_verifier = true; diff --git a/toolchain/language_server/testdata/document_symbol/nested.carbon b/toolchain/language_server/testdata/document_symbol/nested.carbon index 61ab2fa09b42..675602eb815c 100644 --- a/toolchain/language_server/testdata/document_symbol/nested.carbon +++ b/toolchain/language_server/testdata/document_symbol/nested.carbon @@ -29,29 +29,13 @@ class A { // --- AUTOUPDATE-SPLIT -// CHECK:STDOUT: Content-Length: 506{{\r}} +// CHECK:STDOUT: Content-Length: 145{{\r}} // CHECK:STDOUT: {{\r}} // CHECK:STDOUT: { // CHECK:STDOUT: "jsonrpc": "2.0", // CHECK:STDOUT: "method": "textDocument/publishDiagnostics", // CHECK:STDOUT: "params": { -// CHECK:STDOUT: "diagnostics": [ -// CHECK:STDOUT: { -// CHECK:STDOUT: "message": "`Core.Destroy` implicitly referenced here, but package `Core` not found", -// CHECK:STDOUT: "range": { -// CHECK:STDOUT: "end": { -// CHECK:STDOUT: "character": 10, -// CHECK:STDOUT: "line": 1 -// CHECK:STDOUT: }, -// CHECK:STDOUT: "start": { -// CHECK:STDOUT: "character": 0, -// CHECK:STDOUT: "line": 0 -// CHECK:STDOUT: } -// CHECK:STDOUT: }, -// CHECK:STDOUT: "severity": 1, -// CHECK:STDOUT: "source": "carbon" -// CHECK:STDOUT: } -// CHECK:STDOUT: ], +// CHECK:STDOUT: "diagnostics": [], // CHECK:STDOUT: "uri": "file:///class.carbon" // CHECK:STDOUT: } // CHECK:STDOUT: }Content-Length: 1495{{\r}} diff --git a/toolchain/lower/testdata/class/convert.carbon b/toolchain/lower/testdata/class/convert.carbon index 7ae126b569b1..fa8de62a77b3 100644 --- a/toolchain/lower/testdata/class/convert.carbon +++ b/toolchain/lower/testdata/class/convert.carbon @@ -28,7 +28,7 @@ fn DoIt() { // CHECK:STDOUT: ; ModuleID = 'convert.carbon' // CHECK:STDOUT: source_filename = "convert.carbon" // CHECK:STDOUT: -// CHECK:STDOUT: @IntWrapper.val.loc24_3 = internal constant { i32 } { i32 42 } +// CHECK:STDOUT: @IntWrapper.val.loc24_3.1 = internal constant { i32 } { i32 42 } // CHECK:STDOUT: // CHECK:STDOUT: define i32 @"_CConvert.IntWrapper.Main:ImplicitAs.Core"(ptr %self) !dbg !4 { // CHECK:STDOUT: entry: @@ -47,7 +47,7 @@ fn DoIt() { // CHECK:STDOUT: %w.var = alloca { i32 }, align 8, !dbg !12 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %w.var), !dbg !12 // CHECK:STDOUT: %.loc24_31.3.n = getelementptr inbounds nuw { i32 }, ptr %w.var, i32 0, i32 0, !dbg !13 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %w.var, ptr align 4 @IntWrapper.val.loc24_3, i64 4, i1 false), !dbg !12 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %w.var, ptr align 4 @IntWrapper.val.loc24_3.1, i64 4, i1 false), !dbg !12 // CHECK:STDOUT: %IntWrapper.as.ImplicitAs.impl.Convert.call = call i32 @"_CConvert.IntWrapper.Main:ImplicitAs.Core"(ptr %w.var), !dbg !14 // CHECK:STDOUT: call void @_CConsume.Main(i32 %IntWrapper.as.ImplicitAs.impl.Convert.call), !dbg !15 // CHECK:STDOUT: ret void, !dbg !16 diff --git a/toolchain/lower/testdata/class/generic.carbon b/toolchain/lower/testdata/class/generic.carbon index 134c9a1f24cf..17e7751e1a59 100644 --- a/toolchain/lower/testdata/class/generic.carbon +++ b/toolchain/lower/testdata/class/generic.carbon @@ -254,9 +254,9 @@ fn AccessTuple() -> (i32, i32, i32) { // CHECK:STDOUT: ; ModuleID = 'access.carbon' // CHECK:STDOUT: source_filename = "access.carbon" // CHECK:STDOUT: -// CHECK:STDOUT: @C.val.bc7.loc16_3 = internal constant { i1, i32 } { i1 true, i32 0 } -// CHECK:STDOUT: @C.val.f52.loc26_3 = internal constant { i1, {} } { i1 true, {} zeroinitializer } -// CHECK:STDOUT: @C.val.e10.loc31_3 = internal constant { i1, { i32, i32, i32 } } { i1 true, { i32, i32, i32 } { i32 1, i32 2, i32 3 } } +// CHECK:STDOUT: @C.val.bc7.loc16_3.1 = internal constant { i1, i32 } { i1 true, i32 0 } +// CHECK:STDOUT: @C.val.f52.loc26_3.1 = internal constant { i1, {} } { i1 true, {} zeroinitializer } +// CHECK:STDOUT: @C.val.e10.loc31_3.1 = internal constant { i1, { i32, i32, i32 } } { i1 true, { i32, i32, i32 } { i32 1, i32 2, i32 3 } } // CHECK:STDOUT: // CHECK:STDOUT: define i1 @_CAccessBool.Main() !dbg !4 { // CHECK:STDOUT: entry: @@ -264,7 +264,7 @@ fn AccessTuple() -> (i32, i32, i32) { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !7 // CHECK:STDOUT: %.loc16_37.2.v = getelementptr inbounds nuw { i1, i32 }, ptr %c.var, i32 0, i32 0, !dbg !8 // CHECK:STDOUT: %.loc16_37.5.w = getelementptr inbounds nuw { i1, i32 }, ptr %c.var, i32 0, i32 1, !dbg !8 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c.var, ptr align 4 @C.val.bc7.loc16_3, i64 8, i1 false), !dbg !7 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c.var, ptr align 4 @C.val.bc7.loc16_3.1, i64 8, i1 false), !dbg !7 // CHECK:STDOUT: %C.GetBool.call = call i1 @_CGetBool.C.Main.de631560529e9861(ptr %c.var), !dbg !9 // CHECK:STDOUT: ret i1 %C.GetBool.call, !dbg !10 // CHECK:STDOUT: } @@ -275,7 +275,7 @@ fn AccessTuple() -> (i32, i32, i32) { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !12 // CHECK:STDOUT: %.loc21_37.2.v = getelementptr inbounds nuw { i1, i32 }, ptr %c.var, i32 0, i32 0, !dbg !13 // CHECK:STDOUT: %.loc21_37.5.w = getelementptr inbounds nuw { i1, i32 }, ptr %c.var, i32 0, i32 1, !dbg !13 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c.var, ptr align 4 @C.val.bc7.loc16_3, i64 8, i1 false), !dbg !12 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c.var, ptr align 4 @C.val.bc7.loc16_3.1, i64 8, i1 false), !dbg !12 // CHECK:STDOUT: %C.GetT.call = call i32 @_CGetT.C.Main.de631560529e9861(ptr %c.var), !dbg !14 // CHECK:STDOUT: ret i32 %C.GetT.call, !dbg !15 // CHECK:STDOUT: } @@ -286,7 +286,7 @@ fn AccessTuple() -> (i32, i32, i32) { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !17 // CHECK:STDOUT: %.loc26_37.2.v = getelementptr inbounds nuw { i1, {} }, ptr %c.var, i32 0, i32 0, !dbg !18 // CHECK:STDOUT: %.loc26_37.4.w = getelementptr inbounds nuw { i1, {} }, ptr %c.var, i32 0, i32 1, !dbg !18 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %c.var, ptr align 1 @C.val.f52.loc26_3, i64 1, i1 false), !dbg !17 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %c.var, ptr align 1 @C.val.f52.loc26_3.1, i64 1, i1 false), !dbg !17 // CHECK:STDOUT: call void @_CGetT.C.Main.cf13cead63317d44(ptr %c.var), !dbg !19 // CHECK:STDOUT: ret void, !dbg !20 // CHECK:STDOUT: } @@ -300,7 +300,7 @@ fn AccessTuple() -> (i32, i32, i32) { // CHECK:STDOUT: %tuple.elem0.tuple.elem = getelementptr inbounds nuw { i32, i32, i32 }, ptr %.loc31_57.4.w, i32 0, i32 0, !dbg !24 // CHECK:STDOUT: %tuple.elem1.tuple.elem = getelementptr inbounds nuw { i32, i32, i32 }, ptr %.loc31_57.4.w, i32 0, i32 1, !dbg !24 // CHECK:STDOUT: %tuple.elem2.tuple.elem = getelementptr inbounds nuw { i32, i32, i32 }, ptr %.loc31_57.4.w, i32 0, i32 2, !dbg !24 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c.var, ptr align 4 @C.val.e10.loc31_3, i64 16, i1 false), !dbg !22 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c.var, ptr align 4 @C.val.e10.loc31_3.1, i64 16, i1 false), !dbg !22 // CHECK:STDOUT: call void @_CGetT.C.Main.d11cadb9c9049708(ptr %return, ptr %c.var), !dbg !25 // CHECK:STDOUT: ret void, !dbg !26 // CHECK:STDOUT: } diff --git a/toolchain/lower/testdata/class/virtual.carbon b/toolchain/lower/testdata/class/virtual.carbon index 41ee6f0d6a7f..13dd395b319a 100644 --- a/toolchain/lower/testdata/class/virtual.carbon +++ b/toolchain/lower/testdata/class/virtual.carbon @@ -188,9 +188,9 @@ fn Make() { // CHECK:STDOUT: // CHECK:STDOUT: @"_CIntermediate.Classes.$vtable" = external unnamed_addr constant ptr // CHECK:STDOUT: @"_CDerived.Classes.$vtable" = external unnamed_addr constant ptr -// CHECK:STDOUT: @Base.val.loc7_3 = internal constant {} zeroinitializer -// CHECK:STDOUT: @Intermediate.val.ec2.loc8_3 = internal constant { ptr, {} } { ptr @"_CIntermediate.Classes.$vtable", {} zeroinitializer } -// CHECK:STDOUT: @Derived.val.loc9_3 = internal constant { { ptr, {} } } { { ptr, {} } { ptr @"_CDerived.Classes.$vtable", {} zeroinitializer } } +// CHECK:STDOUT: @Base.val.loc7_3.1 = internal constant {} zeroinitializer +// CHECK:STDOUT: @Intermediate.val.ec2.loc8_3.1 = internal constant { ptr, {} } { ptr @"_CIntermediate.Classes.$vtable", {} zeroinitializer } +// CHECK:STDOUT: @Derived.val.loc9_3.1 = internal constant { { ptr, {} } } { { ptr, {} } { ptr @"_CDerived.Classes.$vtable", {} zeroinitializer } } // CHECK:STDOUT: // CHECK:STDOUT: define void @_CCreate.Create() !dbg !4 { // CHECK:STDOUT: entry: @@ -199,16 +199,16 @@ fn Make() { // CHECK:STDOUT: %d.var = alloca { { ptr, {} } }, align 8, !dbg !9 // CHECK:STDOUT: %d2.var = alloca { { ptr, {} } }, align 8, !dbg !10 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %b.var), !dbg !7 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %b.var, ptr align 1 @Base.val.loc7_3, i64 0, i1 false), !dbg !7 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %b.var, ptr align 1 @Base.val.loc7_3.1, i64 0, i1 false), !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %i.var), !dbg !8 // CHECK:STDOUT: %.loc8_44.2.vptr = getelementptr inbounds nuw { ptr, {} }, ptr %i.var, i32 0, i32 0, !dbg !11 // CHECK:STDOUT: %.loc8_44.4.base = getelementptr inbounds nuw { ptr, {} }, ptr %i.var, i32 0, i32 1, !dbg !11 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %i.var, ptr align 8 @Intermediate.val.ec2.loc8_3, i64 8, i1 false), !dbg !8 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %i.var, ptr align 8 @Intermediate.val.ec2.loc8_3.1, i64 8, i1 false), !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %d.var), !dbg !9 // CHECK:STDOUT: %.loc9_49.2.base = getelementptr inbounds nuw { { ptr, {} } }, ptr %d.var, i32 0, i32 0, !dbg !12 // CHECK:STDOUT: %.loc9_48.2.vptr = getelementptr inbounds nuw { ptr, {} }, ptr %.loc9_49.2.base, i32 0, i32 0, !dbg !13 // CHECK:STDOUT: %.loc9_48.4.base = getelementptr inbounds nuw { ptr, {} }, ptr %.loc9_49.2.base, i32 0, i32 1, !dbg !13 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %d.var, ptr align 8 @Derived.val.loc9_3, i64 8, i1 false), !dbg !9 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %d.var, ptr align 8 @Derived.val.loc9_3.1, i64 8, i1 false), !dbg !9 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %d2.var), !dbg !10 // CHECK:STDOUT: ret void, !dbg !14 // CHECK:STDOUT: } @@ -267,7 +267,7 @@ fn Make() { // CHECK:STDOUT: source_filename = "member_init.carbon" // CHECK:STDOUT: // CHECK:STDOUT: @"_CBase.MemberInit.$vtable" = unnamed_addr constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @_CFn.Base.MemberInit to i64), i64 ptrtoint (ptr @"_CBase.MemberInit.$vtable" to i64)) to i32)] -// CHECK:STDOUT: @Base.val.loc13_3 = internal constant { ptr, i32 } { ptr @"_CBase.MemberInit.$vtable", i32 3 } +// CHECK:STDOUT: @Base.val.loc13_3.1 = internal constant { ptr, i32 } { ptr @"_CBase.MemberInit.$vtable", i32 3 } // CHECK:STDOUT: // CHECK:STDOUT: define void @_CFn.Base.MemberInit(ptr %self) !dbg !4 { // CHECK:STDOUT: entry: @@ -292,7 +292,7 @@ fn Make() { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %u.var), !dbg !11 // CHECK:STDOUT: %.loc13_24.2.vptr = getelementptr inbounds nuw { ptr, i32 }, ptr %u.var, i32 0, i32 0, !dbg !15 // CHECK:STDOUT: %.loc13_24.5.m = getelementptr inbounds nuw { ptr, i32 }, ptr %u.var, i32 0, i32 1, !dbg !15 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %u.var, ptr align 8 @Base.val.loc13_3, i64 16, i1 false), !dbg !11 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %u.var, ptr align 8 @Base.val.loc13_3.1, i64 16, i1 false), !dbg !11 // CHECK:STDOUT: ret void, !dbg !16 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -333,7 +333,7 @@ fn Make() { // CHECK:STDOUT: // CHECK:STDOUT: @"_CBase.Main.$vtable" = unnamed_addr constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @_CF.Base.Main to i64), i64 ptrtoint (ptr @"_CBase.Main.$vtable" to i64)) to i32)] // CHECK:STDOUT: @"_CDerived.Main.$vtable" = unnamed_addr constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @_CF.Base.Main to i64), i64 ptrtoint (ptr @"_CDerived.Main.$vtable" to i64)) to i32)] -// CHECK:STDOUT: @Derived.val.loc13_3 = internal constant { { ptr } } { { ptr } { ptr @"_CDerived.Main.$vtable" } } +// CHECK:STDOUT: @Derived.val.loc13_3.1 = internal constant { { ptr } } { { ptr } { ptr @"_CDerived.Main.$vtable" } } // CHECK:STDOUT: // CHECK:STDOUT: declare void @_CF.Base.Main(ptr) // CHECK:STDOUT: @@ -343,7 +343,7 @@ fn Make() { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %v.var), !dbg !7 // CHECK:STDOUT: %.loc13_32.2.base = getelementptr inbounds nuw { { ptr } }, ptr %v.var, i32 0, i32 0, !dbg !8 // CHECK:STDOUT: %.loc13_31.2.vptr = getelementptr inbounds nuw { ptr }, ptr %.loc13_32.2.base, i32 0, i32 0, !dbg !9 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %v.var, ptr align 8 @Derived.val.loc13_3, i64 8, i1 false), !dbg !7 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %v.var, ptr align 8 @Derived.val.loc13_3.1, i64 8, i1 false), !dbg !7 // CHECK:STDOUT: ret void, !dbg !10 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -407,7 +407,7 @@ fn Make() { // CHECK:STDOUT: // CHECK:STDOUT: @"_CBase.Main.$vtable" = unnamed_addr constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @_CF.Base.Main to i64), i64 ptrtoint (ptr @"_CBase.Main.$vtable" to i64)) to i32)] // CHECK:STDOUT: @"_CDerived.Main.$vtable" = unnamed_addr constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @_CF.Derived.Main to i64), i64 ptrtoint (ptr @"_CDerived.Main.$vtable" to i64)) to i32)] -// CHECK:STDOUT: @Derived.val.loc14_3 = internal constant { { ptr } } { { ptr } { ptr @"_CDerived.Main.$vtable" } } +// CHECK:STDOUT: @Derived.val.loc14_3.1 = internal constant { { ptr } } { { ptr } { ptr @"_CDerived.Main.$vtable" } } // CHECK:STDOUT: // CHECK:STDOUT: declare void @_CF.Base.Main(ptr) // CHECK:STDOUT: @@ -419,7 +419,7 @@ fn Make() { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %v.var), !dbg !7 // CHECK:STDOUT: %.loc14_32.2.base = getelementptr inbounds nuw { { ptr } }, ptr %v.var, i32 0, i32 0, !dbg !8 // CHECK:STDOUT: %.loc14_31.2.vptr = getelementptr inbounds nuw { ptr }, ptr %.loc14_32.2.base, i32 0, i32 0, !dbg !9 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %v.var, ptr align 8 @Derived.val.loc14_3, i64 8, i1 false), !dbg !7 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %v.var, ptr align 8 @Derived.val.loc14_3.1, i64 8, i1 false), !dbg !7 // CHECK:STDOUT: %Derived.F.call.vtable = load ptr, ptr %v.var, align 8, !dbg !10 // CHECK:STDOUT: %Derived.F.call = call ptr @llvm.load.relative.i32(ptr %Derived.F.call.vtable, i32 0), !dbg !10 // CHECK:STDOUT: call void %Derived.F.call(ptr %v.var), !dbg !10 @@ -467,10 +467,10 @@ fn Make() { // CHECK:STDOUT: ; ModuleID = 'generic_use.carbon' // CHECK:STDOUT: source_filename = "generic_use.carbon" // CHECK:STDOUT: -// CHECK:STDOUT: @"_CBase.Main.$vtable.6f3ba65278fae545" = unnamed_addr constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @_CF.Base.Main.6f3ba65278fae545 to i64), i64 ptrtoint (ptr @"_CBase.Main.$vtable.6f3ba65278fae545" to i64)) to i32)] -// CHECK:STDOUT: @"_CBase.Main.$vtable.2f61a5251c699b4c" = unnamed_addr constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @_CF.Base.Main.2f61a5251c699b4c to i64), i64 ptrtoint (ptr @"_CBase.Main.$vtable.2f61a5251c699b4c" to i64)) to i32)] -// CHECK:STDOUT: @Base.val.e09.loc16_3 = internal constant { ptr } { ptr @"_CBase.Main.$vtable.6f3ba65278fae545" } -// CHECK:STDOUT: @Base.val.865.loc17_3 = internal constant { ptr } { ptr @"_CBase.Main.$vtable.2f61a5251c699b4c" } +// CHECK:STDOUT: @"_CBase.Main.$vtable.c6982b8c0374fffe" = unnamed_addr constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @_CF.Base.Main.c6982b8c0374fffe to i64), i64 ptrtoint (ptr @"_CBase.Main.$vtable.c6982b8c0374fffe" to i64)) to i32)] +// CHECK:STDOUT: @"_CBase.Main.$vtable.687c55d709ee2de2" = unnamed_addr constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @_CF.Base.Main.687c55d709ee2de2 to i64), i64 ptrtoint (ptr @"_CBase.Main.$vtable.687c55d709ee2de2" to i64)) to i32)] +// CHECK:STDOUT: @Base.val.367.loc16_3.1 = internal constant { ptr } { ptr @"_CBase.Main.$vtable.c6982b8c0374fffe" } +// CHECK:STDOUT: @Base.val.196.loc17_3.1 = internal constant { ptr } { ptr @"_CBase.Main.$vtable.687c55d709ee2de2" } // CHECK:STDOUT: // CHECK:STDOUT: define void @_CF.Main() !dbg !4 { // CHECK:STDOUT: entry: @@ -478,21 +478,21 @@ fn Make() { // CHECK:STDOUT: %t2.var = alloca { ptr }, align 8, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %t1.var), !dbg !7 // CHECK:STDOUT: %.loc16_23.2.vptr = getelementptr inbounds nuw { ptr }, ptr %t1.var, i32 0, i32 0, !dbg !9 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %t1.var, ptr align 8 @Base.val.e09.loc16_3, i64 8, i1 false), !dbg !7 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %t1.var, ptr align 8 @Base.val.367.loc16_3.1, i64 8, i1 false), !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %t2.var), !dbg !8 // CHECK:STDOUT: %.loc17_23.2.vptr = getelementptr inbounds nuw { ptr }, ptr %t2.var, i32 0, i32 0, !dbg !10 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %t2.var, ptr align 8 @Base.val.865.loc17_3, i64 8, i1 false), !dbg !8 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %t2.var, ptr align 8 @Base.val.196.loc17_3.1, i64 8, i1 false), !dbg !8 // CHECK:STDOUT: ret void, !dbg !11 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CF.Base.Main.6f3ba65278fae545(ptr %self) !dbg !12 { +// CHECK:STDOUT: define linkonce_odr void @_CF.Base.Main.c6982b8c0374fffe(ptr %self) !dbg !12 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %v.var = alloca {}, align 8, !dbg !13 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %v.var), !dbg !13 // CHECK:STDOUT: ret void, !dbg !14 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CF.Base.Main.2f61a5251c699b4c(ptr %self) !dbg !15 { +// CHECK:STDOUT: define linkonce_odr void @_CF.Base.Main.687c55d709ee2de2(ptr %self) !dbg !15 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %v.var = alloca { {} }, align 8, !dbg !16 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %v.var), !dbg !16 @@ -527,10 +527,10 @@ fn Make() { // CHECK:STDOUT: !9 = !DILocation(line: 16, column: 22, scope: !4) // CHECK:STDOUT: !10 = !DILocation(line: 17, column: 22, scope: !4) // CHECK:STDOUT: !11 = !DILocation(line: 15, column: 1, scope: !4) -// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "F", linkageName: "_CF.Base.Main.6f3ba65278fae545", scope: null, file: !3, line: 5, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "F", linkageName: "_CF.Base.Main.c6982b8c0374fffe", scope: null, file: !3, line: 5, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !13 = !DILocation(line: 6, column: 5, scope: !12) // CHECK:STDOUT: !14 = !DILocation(line: 5, column: 3, scope: !12) -// CHECK:STDOUT: !15 = distinct !DISubprogram(name: "F", linkageName: "_CF.Base.Main.2f61a5251c699b4c", scope: null, file: !3, line: 5, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !15 = distinct !DISubprogram(name: "F", linkageName: "_CF.Base.Main.687c55d709ee2de2", scope: null, file: !3, line: 5, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !16 = !DILocation(line: 6, column: 5, scope: !15) // CHECK:STDOUT: !17 = !DILocation(line: 5, column: 3, scope: !15) // CHECK:STDOUT: ; ModuleID = 'generic_base.carbon' diff --git a/toolchain/lower/testdata/for/bindings.carbon b/toolchain/lower/testdata/for/bindings.carbon index d8ac02f05b33..2979f10060e0 100644 --- a/toolchain/lower/testdata/for/bindings.carbon +++ b/toolchain/lower/testdata/for/bindings.carbon @@ -34,7 +34,7 @@ fn For() { // CHECK:STDOUT: ; ModuleID = 'bindings.carbon' // CHECK:STDOUT: source_filename = "bindings.carbon" // CHECK:STDOUT: -// CHECK:STDOUT: @EmptyRange.val.loc27_3 = internal constant {} zeroinitializer +// CHECK:STDOUT: @EmptyRange.val.loc27_3.1 = internal constant {} zeroinitializer // CHECK:STDOUT: // CHECK:STDOUT: declare void @_CF.Main(i32, ptr) // CHECK:STDOUT: @@ -46,7 +46,7 @@ fn For() { // CHECK:STDOUT: %n.var = alloca i32, align 4, !dbg !9 // CHECK:STDOUT: %.loc29_33.8.temp = alloca { i32, i32 }, align 8, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %r.var), !dbg !7 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %r.var, ptr align 1 @EmptyRange.val.loc27_3, i64 0, i1 false), !dbg !7 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %r.var, ptr align 1 @EmptyRange.val.loc27_3.1, i64 0, i1 false), !dbg !7 // CHECK:STDOUT: call void @"_CNewCursor.EmptyRange.Main:Iterate.Core.d9506acff356e5d2"(ptr %r.var), !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %var), !dbg !8 // CHECK:STDOUT: br label %for.next, !dbg !8 diff --git a/toolchain/lower/testdata/function/definition/destroy.carbon b/toolchain/lower/testdata/function/definition/destroy.carbon index de0c4dfaa912..855bfa2ce17e 100644 --- a/toolchain/lower/testdata/function/definition/destroy.carbon +++ b/toolchain/lower/testdata/function/definition/destroy.carbon @@ -3,7 +3,6 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/convert.carbon -// EXTRA-ARGS: --no-gen-implicit-type-impls // // AUTOUPDATE // TIP: To test this file alone, run: diff --git a/toolchain/lower/testdata/function/generic/call.carbon b/toolchain/lower/testdata/function/generic/call.carbon index f4c5068a7c9d..bbf3daa74a01 100644 --- a/toolchain/lower/testdata/function/generic/call.carbon +++ b/toolchain/lower/testdata/function/generic/call.carbon @@ -34,8 +34,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: %type = type {} // CHECK:STDOUT: -// CHECK:STDOUT: @C.val.loc20_3 = internal constant {} zeroinitializer -// CHECK:STDOUT: @D.val.loc21_3 = internal constant {} zeroinitializer +// CHECK:STDOUT: @C.val.loc20_3.1 = internal constant {} zeroinitializer +// CHECK:STDOUT: @D.val.loc21_3.1 = internal constant {} zeroinitializer // CHECK:STDOUT: // CHECK:STDOUT: define void @_CG.Main() !dbg !4 { // CHECK:STDOUT: entry: @@ -44,9 +44,9 @@ fn G() { // CHECK:STDOUT: %n.var = alloca i32, align 4, !dbg !9 // CHECK:STDOUT: %m.var = alloca double, align 8, !dbg !10 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !7 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %c.var, ptr align 1 @C.val.loc20_3, i64 0, i1 false), !dbg !7 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %c.var, ptr align 1 @C.val.loc20_3.1, i64 0, i1 false), !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %d.var), !dbg !8 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %d.var, ptr align 1 @D.val.loc21_3, i64 0, i1 false), !dbg !8 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %d.var, ptr align 1 @D.val.loc21_3.1, i64 0, i1 false), !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %n.var), !dbg !9 // CHECK:STDOUT: store i32 0, ptr %n.var, align 4, !dbg !9 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %m.var), !dbg !10 diff --git a/toolchain/lower/testdata/function/generic/call_basic.carbon b/toolchain/lower/testdata/function/generic/call_basic.carbon index 6e6762f5e29b..8b3a1bc16ab4 100644 --- a/toolchain/lower/testdata/function/generic/call_basic.carbon +++ b/toolchain/lower/testdata/function/generic/call_basic.carbon @@ -85,12 +85,12 @@ fn M() { // CHECK:STDOUT: %.loc54 = load i32, ptr %n.var, align 4, !dbg !13 // CHECK:STDOUT: call void @_CF.Main.b88d1103f417c6d4(i32 %.loc54), !dbg !14 // CHECK:STDOUT: %.loc55_9 = load i32, ptr %n.var, align 4, !dbg !15 -// CHECK:STDOUT: %G.call.loc55 = call i32 @_CG.Main.dedae426f8f6526d(i32 %.loc55_9), !dbg !16 +// CHECK:STDOUT: %G.call.loc55 = call i32 @_CG.Main.5458818be7a67202(i32 %.loc55_9), !dbg !16 // CHECK:STDOUT: store i32 %G.call.loc55, ptr %m.var, align 4, !dbg !17 // CHECK:STDOUT: %.loc56 = load double, ptr %p.var, align 8, !dbg !18 // CHECK:STDOUT: call void @_CF.Main.d4b5665541d5d7a8(double %.loc56), !dbg !19 // CHECK:STDOUT: %.loc57_9 = load double, ptr %p.var, align 8, !dbg !20 -// CHECK:STDOUT: %G.call.loc57 = call double @_CG.Main.42589ad6dce0869e(double %.loc57_9), !dbg !21 +// CHECK:STDOUT: %G.call.loc57 = call double @_CG.Main.6d1061d836075fdf(double %.loc57_9), !dbg !21 // CHECK:STDOUT: store double %G.call.loc57, ptr %q.var, align 8, !dbg !22 // CHECK:STDOUT: ret void, !dbg !23 // CHECK:STDOUT: } @@ -106,7 +106,7 @@ fn M() { // CHECK:STDOUT: ret void, !dbg !25 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.dedae426f8f6526d(i32 %x) !dbg !26 { +// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.5458818be7a67202(i32 %x) !dbg !26 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc29_6.3.temp = alloca i32, align 4, !dbg !27 // CHECK:STDOUT: %.loc31_8.3.temp = alloca i32, align 4, !dbg !28 @@ -122,7 +122,7 @@ fn M() { // CHECK:STDOUT: store i32 %H.call.loc29, ptr %.loc29_6.3.temp, align 4, !dbg !27 // CHECK:STDOUT: %H.call.loc30 = call %type @_CH.Main.402deed6b8733082(%type zeroinitializer), !dbg !36 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_8.3.temp), !dbg !28 -// CHECK:STDOUT: %G.call = call i32 @_CG.Main.dedae426f8f6526d(i32 %x), !dbg !28 +// CHECK:STDOUT: %G.call = call i32 @_CG.Main.5458818be7a67202(i32 %x), !dbg !28 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_9.3.temp), !dbg !29 // CHECK:STDOUT: store i32 %G.call, ptr %.loc31_8.3.temp, align 4, !dbg !28 // CHECK:STDOUT: %.loc31_8.5 = load i32, ptr %.loc31_8.3.temp, align 4, !dbg !28 @@ -151,7 +151,7 @@ fn M() { // CHECK:STDOUT: ret void, !dbg !47 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr double @_CG.Main.42589ad6dce0869e(double %x) !dbg !48 { +// CHECK:STDOUT: define linkonce_odr double @_CG.Main.6d1061d836075fdf(double %x) !dbg !48 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc29_6.3.temp = alloca double, align 8, !dbg !49 // CHECK:STDOUT: %.loc31_8.3.temp = alloca double, align 8, !dbg !50 @@ -167,7 +167,7 @@ fn M() { // CHECK:STDOUT: store double %H.call.loc29, ptr %.loc29_6.3.temp, align 8, !dbg !49 // CHECK:STDOUT: %H.call.loc30 = call %type @_CH.Main.402deed6b8733082(%type zeroinitializer), !dbg !58 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_8.3.temp), !dbg !50 -// CHECK:STDOUT: %G.call = call double @_CG.Main.42589ad6dce0869e(double %x), !dbg !50 +// CHECK:STDOUT: %G.call = call double @_CG.Main.6d1061d836075fdf(double %x), !dbg !50 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_9.3.temp), !dbg !51 // CHECK:STDOUT: store double %G.call, ptr %.loc31_8.3.temp, align 8, !dbg !50 // CHECK:STDOUT: %.loc31_8.5 = load double, ptr %.loc31_8.3.temp, align 8, !dbg !50 @@ -257,7 +257,7 @@ fn M() { // CHECK:STDOUT: !23 = !DILocation(line: 48, column: 1, scope: !8) // CHECK:STDOUT: !24 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 19, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !25 = !DILocation(line: 19, column: 1, scope: !24) -// CHECK:STDOUT: !26 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.dedae426f8f6526d", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !26 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.5458818be7a67202", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !27 = !DILocation(line: 29, column: 3, scope: !26) // CHECK:STDOUT: !28 = !DILocation(line: 31, column: 5, scope: !26) // CHECK:STDOUT: !29 = !DILocation(line: 31, column: 3, scope: !26) @@ -279,7 +279,7 @@ fn M() { // CHECK:STDOUT: !45 = !DILocation(line: 45, column: 3, scope: !26) // CHECK:STDOUT: !46 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.d4b5665541d5d7a8", scope: null, file: !3, line: 19, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !47 = !DILocation(line: 19, column: 1, scope: !46) -// CHECK:STDOUT: !48 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.42589ad6dce0869e", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !48 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.6d1061d836075fdf", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !49 = !DILocation(line: 29, column: 3, scope: !48) // CHECK:STDOUT: !50 = !DILocation(line: 31, column: 5, scope: !48) // CHECK:STDOUT: !51 = !DILocation(line: 31, column: 3, scope: !48) diff --git a/toolchain/lower/testdata/function/generic/call_basic_depth.carbon b/toolchain/lower/testdata/function/generic/call_basic_depth.carbon index cd5767d9743b..738c03737eca 100644 --- a/toolchain/lower/testdata/function/generic/call_basic_depth.carbon +++ b/toolchain/lower/testdata/function/generic/call_basic_depth.carbon @@ -48,7 +48,7 @@ fn M() { // CHECK:STDOUT: %.loc34 = load i32, ptr %n.var, align 4, !dbg !9 // CHECK:STDOUT: call void @_CF.Main.b88d1103f417c6d4(i32 %.loc34), !dbg !10 // CHECK:STDOUT: %.loc35_9 = load i32, ptr %n.var, align 4, !dbg !11 -// CHECK:STDOUT: %G.call = call i32 @_CG.Main.dedae426f8f6526d(i32 %.loc35_9), !dbg !12 +// CHECK:STDOUT: %G.call = call i32 @_CG.Main.5458818be7a67202(i32 %.loc35_9), !dbg !12 // CHECK:STDOUT: store i32 %G.call, ptr %m.var, align 4, !dbg !13 // CHECK:STDOUT: ret void, !dbg !14 // CHECK:STDOUT: } @@ -61,7 +61,7 @@ fn M() { // CHECK:STDOUT: ret void, !dbg !16 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.dedae426f8f6526d(i32 %x) !dbg !17 { +// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.5458818be7a67202(i32 %x) !dbg !17 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc25_6.3.temp = alloca i32, align 4, !dbg !18 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc25_6.3.temp), !dbg !18 @@ -102,7 +102,7 @@ fn M() { // CHECK:STDOUT: !14 = !DILocation(line: 30, column: 1, scope: !4) // CHECK:STDOUT: !15 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 16, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !16 = !DILocation(line: 16, column: 1, scope: !15) -// CHECK:STDOUT: !17 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.dedae426f8f6526d", scope: null, file: !3, line: 24, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !17 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.5458818be7a67202", scope: null, file: !3, line: 24, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !18 = !DILocation(line: 25, column: 3, scope: !17) // CHECK:STDOUT: !19 = !DILocation(line: 26, column: 3, scope: !17) // CHECK:STDOUT: !20 = !DILocation(line: 27, column: 3, scope: !17) diff --git a/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon b/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon index 6fb3cf119ba6..d6d66a7b4356 100644 --- a/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon +++ b/toolchain/lower/testdata/function/generic/call_deref_ptr.carbon @@ -52,26 +52,26 @@ fn M() { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !8 // CHECK:STDOUT: %.loc39_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !9 -// CHECK:STDOUT: call void @_CF.Main.dedae426f8f6526d(ptr %.loc39_5), !dbg !10 +// CHECK:STDOUT: call void @_CF.Main.5458818be7a67202(ptr %.loc39_5), !dbg !10 // CHECK:STDOUT: %.loc40_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !11 -// CHECK:STDOUT: call void @_CF.Main.42589ad6dce0869e(ptr %.loc40_5), !dbg !12 +// CHECK:STDOUT: call void @_CF.Main.6d1061d836075fdf(ptr %.loc40_5), !dbg !12 // CHECK:STDOUT: ret void, !dbg !13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #0 // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CF.Main.dedae426f8f6526d(ptr %x) !dbg !14 { +// CHECK:STDOUT: define linkonce_odr void @_CF.Main.5458818be7a67202(ptr %x) !dbg !14 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %A.call = call %type @_CA.Main.402deed6b8733082(%type zeroinitializer), !dbg !15 -// CHECK:STDOUT: call void @_CB.Main.dedae426f8f6526d(ptr %x), !dbg !16 +// CHECK:STDOUT: call void @_CB.Main.5458818be7a67202(ptr %x), !dbg !16 // CHECK:STDOUT: ret void, !dbg !17 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CF.Main.42589ad6dce0869e(ptr %x) !dbg !18 { +// CHECK:STDOUT: define linkonce_odr void @_CF.Main.6d1061d836075fdf(ptr %x) !dbg !18 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %A.call = call %type @_CA.Main.402deed6b8733082(%type zeroinitializer), !dbg !19 -// CHECK:STDOUT: call void @_CB.Main.42589ad6dce0869e(ptr %x), !dbg !20 +// CHECK:STDOUT: call void @_CB.Main.6d1061d836075fdf(ptr %x), !dbg !20 // CHECK:STDOUT: ret void, !dbg !21 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -80,7 +80,7 @@ fn M() { // CHECK:STDOUT: ret %type %x, !dbg !23 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CB.Main.dedae426f8f6526d(ptr %x) !dbg !24 { +// CHECK:STDOUT: define linkonce_odr void @_CB.Main.5458818be7a67202(ptr %x) !dbg !24 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc27_7.3.temp = alloca i32, align 4, !dbg !25 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc27_7.3.temp), !dbg !25 @@ -90,7 +90,7 @@ fn M() { // CHECK:STDOUT: ret void, !dbg !27 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CB.Main.42589ad6dce0869e(ptr %x) !dbg !28 { +// CHECK:STDOUT: define linkonce_odr void @_CB.Main.6d1061d836075fdf(ptr %x) !dbg !28 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc27_7.3.temp = alloca double, align 8, !dbg !29 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc27_7.3.temp), !dbg !29 @@ -133,21 +133,21 @@ fn M() { // CHECK:STDOUT: !11 = !DILocation(line: 40, column: 5, scope: !4) // CHECK:STDOUT: !12 = !DILocation(line: 40, column: 3, scope: !4) // CHECK:STDOUT: !13 = !DILocation(line: 35, column: 1, scope: !4) -// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.dedae426f8f6526d", scope: null, file: !3, line: 30, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.5458818be7a67202", scope: null, file: !3, line: 30, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !15 = !DILocation(line: 31, column: 3, scope: !14) // CHECK:STDOUT: !16 = !DILocation(line: 32, column: 3, scope: !14) // CHECK:STDOUT: !17 = !DILocation(line: 30, column: 1, scope: !14) -// CHECK:STDOUT: !18 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.42589ad6dce0869e", scope: null, file: !3, line: 30, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !18 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.6d1061d836075fdf", scope: null, file: !3, line: 30, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !19 = !DILocation(line: 31, column: 3, scope: !18) // CHECK:STDOUT: !20 = !DILocation(line: 32, column: 3, scope: !18) // CHECK:STDOUT: !21 = !DILocation(line: 30, column: 1, scope: !18) // CHECK:STDOUT: !22 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.402deed6b8733082", scope: null, file: !3, line: 18, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !23 = !DILocation(line: 19, column: 3, scope: !22) -// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.dedae426f8f6526d", scope: null, file: !3, line: 26, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.5458818be7a67202", scope: null, file: !3, line: 26, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !25 = !DILocation(line: 27, column: 3, scope: !24) // CHECK:STDOUT: !26 = !DILocation(line: 27, column: 5, scope: !24) // CHECK:STDOUT: !27 = !DILocation(line: 26, column: 1, scope: !24) -// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.42589ad6dce0869e", scope: null, file: !3, line: 26, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.6d1061d836075fdf", scope: null, file: !3, line: 26, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !29 = !DILocation(line: 27, column: 3, scope: !28) // CHECK:STDOUT: !30 = !DILocation(line: 27, column: 5, scope: !28) // CHECK:STDOUT: !31 = !DILocation(line: 26, column: 1, scope: !28) diff --git a/toolchain/lower/testdata/function/generic/call_different_impls_with_const.carbon b/toolchain/lower/testdata/function/generic/call_different_impls_with_const.carbon index 9cdaae203f27..74673e0669fa 100644 --- a/toolchain/lower/testdata/function/generic/call_different_impls_with_const.carbon +++ b/toolchain/lower/testdata/function/generic/call_different_impls_with_const.carbon @@ -62,7 +62,7 @@ fn Run() { // CHECK:STDOUT: define void @main() !dbg !12 { // CHECK:STDOUT: entry: // CHECK:STDOUT: call void @_CG.Main.5595bcb1d6932ffa(), !dbg !13 -// CHECK:STDOUT: call void @_CG.Main.029df562ae676f5b(), !dbg !14 +// CHECK:STDOUT: call void @_CG.Main.b5f20a8e74ede332(), !dbg !14 // CHECK:STDOUT: ret void, !dbg !15 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -80,7 +80,7 @@ fn Run() { // CHECK:STDOUT: ret void, !dbg !18 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CG.Main.029df562ae676f5b() !dbg !19 { +// CHECK:STDOUT: define linkonce_odr void @_CG.Main.b5f20a8e74ede332() !dbg !19 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc37_20.1.temp = alloca i32, align 4, !dbg !20 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc37_20.1.temp), !dbg !20 @@ -121,6 +121,6 @@ fn Run() { // CHECK:STDOUT: !16 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.5595bcb1d6932ffa", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !17 = !DILocation(line: 37, column: 16, scope: !16) // CHECK:STDOUT: !18 = !DILocation(line: 36, column: 1, scope: !16) -// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.029df562ae676f5b", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.b5f20a8e74ede332", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !20 = !DILocation(line: 37, column: 16, scope: !19) // CHECK:STDOUT: !21 = !DILocation(line: 36, column: 1, scope: !19) diff --git a/toolchain/lower/testdata/function/generic/call_different_specific.carbon b/toolchain/lower/testdata/function/generic/call_different_specific.carbon index 1aa7300d0c08..f7d0bbc00a30 100644 --- a/toolchain/lower/testdata/function/generic/call_different_specific.carbon +++ b/toolchain/lower/testdata/function/generic/call_different_specific.carbon @@ -59,26 +59,26 @@ fn M() { // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !8 // CHECK:STDOUT: %.loc46_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !9 -// CHECK:STDOUT: call void @_CF.Main.dedae426f8f6526d(ptr %.loc46_5), !dbg !10 +// CHECK:STDOUT: call void @_CF.Main.5458818be7a67202(ptr %.loc46_5), !dbg !10 // CHECK:STDOUT: %.loc47_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !11 -// CHECK:STDOUT: call void @_CF.Main.42589ad6dce0869e(ptr %.loc47_5), !dbg !12 +// CHECK:STDOUT: call void @_CF.Main.6d1061d836075fdf(ptr %.loc47_5), !dbg !12 // CHECK:STDOUT: ret void, !dbg !13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #0 // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CF.Main.dedae426f8f6526d(ptr %x) !dbg !14 { +// CHECK:STDOUT: define linkonce_odr void @_CF.Main.5458818be7a67202(ptr %x) !dbg !14 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %A.call = call %type @_CA.Main.402deed6b8733082(%type zeroinitializer), !dbg !15 -// CHECK:STDOUT: call void @_CB.Main.dedae426f8f6526d(ptr %x), !dbg !16 +// CHECK:STDOUT: call void @_CB.Main.5458818be7a67202(ptr %x), !dbg !16 // CHECK:STDOUT: ret void, !dbg !17 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CF.Main.42589ad6dce0869e(ptr %x) !dbg !18 { +// CHECK:STDOUT: define linkonce_odr void @_CF.Main.6d1061d836075fdf(ptr %x) !dbg !18 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %A.call = call %type @_CA.Main.402deed6b8733082(%type zeroinitializer), !dbg !19 -// CHECK:STDOUT: call void @_CB.Main.42589ad6dce0869e(ptr %x), !dbg !20 +// CHECK:STDOUT: call void @_CB.Main.6d1061d836075fdf(ptr %x), !dbg !20 // CHECK:STDOUT: ret void, !dbg !21 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -87,7 +87,7 @@ fn M() { // CHECK:STDOUT: ret %type %x, !dbg !23 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CB.Main.dedae426f8f6526d(ptr %x) !dbg !24 { +// CHECK:STDOUT: define linkonce_odr void @_CB.Main.5458818be7a67202(ptr %x) !dbg !24 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc34_7.3.temp = alloca i32, align 4, !dbg !25 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.3.temp), !dbg !25 @@ -97,7 +97,7 @@ fn M() { // CHECK:STDOUT: ret void, !dbg !27 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CB.Main.42589ad6dce0869e(ptr %x) !dbg !28 { +// CHECK:STDOUT: define linkonce_odr void @_CB.Main.6d1061d836075fdf(ptr %x) !dbg !28 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc34_7.3.temp = alloca double, align 8, !dbg !29 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.3.temp), !dbg !29 @@ -140,21 +140,21 @@ fn M() { // CHECK:STDOUT: !11 = !DILocation(line: 47, column: 5, scope: !4) // CHECK:STDOUT: !12 = !DILocation(line: 47, column: 3, scope: !4) // CHECK:STDOUT: !13 = !DILocation(line: 42, column: 1, scope: !4) -// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.dedae426f8f6526d", scope: null, file: !3, line: 37, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.5458818be7a67202", scope: null, file: !3, line: 37, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !15 = !DILocation(line: 38, column: 3, scope: !14) // CHECK:STDOUT: !16 = !DILocation(line: 39, column: 3, scope: !14) // CHECK:STDOUT: !17 = !DILocation(line: 37, column: 1, scope: !14) -// CHECK:STDOUT: !18 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.42589ad6dce0869e", scope: null, file: !3, line: 37, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !18 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.6d1061d836075fdf", scope: null, file: !3, line: 37, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !19 = !DILocation(line: 38, column: 3, scope: !18) // CHECK:STDOUT: !20 = !DILocation(line: 39, column: 3, scope: !18) // CHECK:STDOUT: !21 = !DILocation(line: 37, column: 1, scope: !18) // CHECK:STDOUT: !22 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.402deed6b8733082", scope: null, file: !3, line: 25, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !23 = !DILocation(line: 26, column: 3, scope: !22) -// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.dedae426f8f6526d", scope: null, file: !3, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.5458818be7a67202", scope: null, file: !3, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !25 = !DILocation(line: 34, column: 3, scope: !24) // CHECK:STDOUT: !26 = !DILocation(line: 34, column: 5, scope: !24) // CHECK:STDOUT: !27 = !DILocation(line: 33, column: 1, scope: !24) -// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.42589ad6dce0869e", scope: null, file: !3, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.6d1061d836075fdf", scope: null, file: !3, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !29 = !DILocation(line: 34, column: 3, scope: !28) // CHECK:STDOUT: !30 = !DILocation(line: 34, column: 5, scope: !28) // CHECK:STDOUT: !31 = !DILocation(line: 33, column: 1, scope: !28) diff --git a/toolchain/lower/testdata/function/generic/call_method.carbon b/toolchain/lower/testdata/function/generic/call_method.carbon index a64f8b4b930c..6ab24b82ebb4 100644 --- a/toolchain/lower/testdata/function/generic/call_method.carbon +++ b/toolchain/lower/testdata/function/generic/call_method.carbon @@ -25,14 +25,14 @@ fn CallF() -> i32 { // CHECK:STDOUT: ; ModuleID = 'call_method.carbon' // CHECK:STDOUT: source_filename = "call_method.carbon" // CHECK:STDOUT: -// CHECK:STDOUT: @C.val.loc20_3 = internal constant {} zeroinitializer +// CHECK:STDOUT: @C.val.loc20_3.1 = internal constant {} zeroinitializer // CHECK:STDOUT: // CHECK:STDOUT: define i32 @_CCallF.Main() !dbg !4 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %c.var = alloca {}, align 8, !dbg !7 // CHECK:STDOUT: %n.var = alloca i32, align 4, !dbg !8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !7 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %c.var, ptr align 1 @C.val.loc20_3, i64 0, i1 false), !dbg !7 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %c.var, ptr align 1 @C.val.loc20_3.1, i64 0, i1 false), !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %n.var), !dbg !8 // CHECK:STDOUT: store i32 0, ptr %n.var, align 4, !dbg !8 // CHECK:STDOUT: %.loc22_14 = load i32, ptr %n.var, align 4, !dbg !9 diff --git a/toolchain/lower/testdata/function/generic/type_representation.carbon b/toolchain/lower/testdata/function/generic/type_representation.carbon index d9ef444dcf2a..3800d6ad414f 100644 --- a/toolchain/lower/testdata/function/generic/type_representation.carbon +++ b/toolchain/lower/testdata/function/generic/type_representation.carbon @@ -84,7 +84,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) { // CHECK:STDOUT: // CHECK:STDOUT: define i32 @_CF_i32.Main(i32 %a) !dbg !8 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %F.call = call i32 @_CF.Main.91acb171499e2658(i32 %a), !dbg !9 +// CHECK:STDOUT: %F.call = call i32 @_CF.Main.6a6da5347b4dd84b(i32 %a), !dbg !9 // CHECK:STDOUT: ret i32 %F.call, !dbg !10 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -103,7 +103,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) { // CHECK:STDOUT: // CHECK:STDOUT: define void @_CF_X.Main(ptr sret({ i32, i32 }) %return, ptr %a) !dbg !16 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_CF.Main.6ef35d4a7684e057(ptr %return, ptr %a), !dbg !17 +// CHECK:STDOUT: call void @_CF.Main.287da2429e961b22(ptr %return, ptr %a), !dbg !17 // CHECK:STDOUT: ret void, !dbg !18 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -156,7 +156,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) { // CHECK:STDOUT: ret void, !dbg !37 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr i32 @_CF.Main.91acb171499e2658(i32 %a) !dbg !38 { +// CHECK:STDOUT: define linkonce_odr i32 @_CF.Main.6a6da5347b4dd84b(i32 %a) !dbg !38 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %v.var = alloca i32, align 4, !dbg !39 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %v.var), !dbg !39 @@ -166,7 +166,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) { // CHECK:STDOUT: ret i32 %.loc19, !dbg !42 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: define linkonce_odr void @_CF.Main.6ef35d4a7684e057(ptr sret({ i32, i32 }) %return, ptr %a) !dbg !43 { +// CHECK:STDOUT: define linkonce_odr void @_CF.Main.287da2429e961b22(ptr sret({ i32, i32 }) %return, ptr %a) !dbg !43 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %v.var = alloca { i32, i32 }, align 8, !dbg !44 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %v.var), !dbg !44 @@ -251,12 +251,12 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) { // CHECK:STDOUT: !35 = distinct !DISubprogram(name: "F_nested_tuple", linkageName: "_CF_nested_tuple.Main", scope: null, file: !3, line: 73, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !36 = !DILocation(line: 74, column: 10, scope: !35) // CHECK:STDOUT: !37 = !DILocation(line: 74, column: 3, scope: !35) -// CHECK:STDOUT: !38 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.91acb171499e2658", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !38 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.6a6da5347b4dd84b", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !39 = !DILocation(line: 18, column: 3, scope: !38) // CHECK:STDOUT: !40 = !DILocation(line: 18, column: 14, scope: !38) // CHECK:STDOUT: !41 = !DILocation(line: 19, column: 10, scope: !38) // CHECK:STDOUT: !42 = !DILocation(line: 19, column: 3, scope: !38) -// CHECK:STDOUT: !43 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.6ef35d4a7684e057", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !43 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.287da2429e961b22", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2) // CHECK:STDOUT: !44 = !DILocation(line: 18, column: 3, scope: !43) // CHECK:STDOUT: !45 = !DILocation(line: 18, column: 14, scope: !43) // CHECK:STDOUT: !46 = !DILocation(line: 19, column: 10, scope: !43) diff --git a/toolchain/lower/testdata/let/copy_value_rep.carbon b/toolchain/lower/testdata/let/copy_value_rep.carbon index 17ba45cf0d15..928c66696776 100644 --- a/toolchain/lower/testdata/let/copy_value_rep.carbon +++ b/toolchain/lower/testdata/let/copy_value_rep.carbon @@ -25,14 +25,14 @@ fn Run() -> i32 { // CHECK:STDOUT: ; ModuleID = 'copy_value_rep.carbon' // CHECK:STDOUT: source_filename = "copy_value_rep.carbon" // CHECK:STDOUT: -// CHECK:STDOUT: @X.val.loc18_3 = internal constant { i32 } { i32 1 } +// CHECK:STDOUT: @X.val.loc18_3.1 = internal constant { i32 } { i32 1 } // CHECK:STDOUT: // CHECK:STDOUT: define i32 @main() !dbg !4 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %x.var = alloca { i32 }, align 8, !dbg !7 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %x.var), !dbg !7 // CHECK:STDOUT: %.loc18_21.3.a = getelementptr inbounds nuw { i32 }, ptr %x.var, i32 0, i32 0, !dbg !8 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %x.var, ptr align 4 @X.val.loc18_3, i64 4, i1 false), !dbg !7 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %x.var, ptr align 4 @X.val.loc18_3.1, i64 4, i1 false), !dbg !7 // CHECK:STDOUT: %.loc19_17.1.a = getelementptr inbounds nuw { i32 }, ptr %x.var, i32 0, i32 0, !dbg !9 // CHECK:STDOUT: %.loc19_17.2 = load i32, ptr %.loc19_17.1.a, align 4, !dbg !9 // CHECK:STDOUT: %.loc20_4.a = getelementptr inbounds nuw { i32 }, ptr %x.var, i32 0, i32 0, !dbg !10 diff --git a/toolchain/testing/testdata/min_prelude/none.carbon b/toolchain/testing/testdata/min_prelude/none.carbon index e27d59f5298c..38f2f696c475 100644 --- a/toolchain/testing/testdata/min_prelude/none.carbon +++ b/toolchain/testing/testdata/min_prelude/none.carbon @@ -2,7 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// EXTRA-ARGS: --no-prelude-import --no-gen-implicit-type-impls --exclude-dump-file-prefix=min_prelude/ +// EXTRA-ARGS: --no-prelude-import --exclude-dump-file-prefix=min_prelude/ // --- min_prelude/none.carbon