diff --git a/toolchain/check/testdata/builtins/type/and.carbon b/toolchain/check/testdata/builtins/type/and.carbon new file mode 100644 index 000000000000..6234d52d991f --- /dev/null +++ b/toolchain/check/testdata/builtins/type/and.carbon @@ -0,0 +1,101 @@ +// 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 +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/builtins/type/and.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/builtins/type/and.carbon + +// --- combine_facets.carbon + +library "[[@TEST_NAME]]"; + +fn TypeAnd(a: type, b: type) -> type = "type.and"; + +interface I {} +interface J {} + +fn TakeIJ(T:! TypeAnd(I, J)) {} + +class IJ { + impl as I {} + impl as J {} +} + +fn Call() { + TakeIJ(IJ); +} + +// --- fail_combine_facets_bad_call.carbon + +library "[[@TEST_NAME]]"; + +fn TypeAnd(a: type, b: type) -> type = "type.and"; + +interface I {} +interface J {} + +fn TakeIJ(T:! TypeAnd(I, J)) {} + +class JustI { + impl as I {} +} + +class JustJ { + impl as J {} +} + +fn Call() { + // CHECK:STDERR: fail_combine_facets_bad_call.carbon:[[@LINE+7]]:3: error: cannot convert type `JustI` into type implementing `I & J` [ConversionFailureTypeToFacet] + // CHECK:STDERR: TakeIJ(JustI); + // CHECK:STDERR: ^~~~~~~~~~~~~ + // CHECK:STDERR: fail_combine_facets_bad_call.carbon:[[@LINE-14]]:11: note: initializing generic parameter `T` declared here [InitializingGenericParam] + // CHECK:STDERR: fn TakeIJ(T:! TypeAnd(I, J)) {} + // CHECK:STDERR: ^ + // CHECK:STDERR: + TakeIJ(JustI); + // CHECK:STDERR: fail_combine_facets_bad_call.carbon:[[@LINE+7]]:3: error: cannot convert type `JustJ` into type implementing `I & J` [ConversionFailureTypeToFacet] + // CHECK:STDERR: TakeIJ(JustJ); + // CHECK:STDERR: ^~~~~~~~~~~~~ + // CHECK:STDERR: fail_combine_facets_bad_call.carbon:[[@LINE-22]]:11: note: initializing generic parameter `T` declared here [InitializingGenericParam] + // CHECK:STDERR: fn TakeIJ(T:! TypeAnd(I, J)) {} + // CHECK:STDERR: ^ + // CHECK:STDERR: + TakeIJ(JustJ); +} + +// --- fail_bad_decl.carbon + +library "[[@TEST_NAME]]"; + +// CHECK:STDERR: fail_bad_decl.carbon:[[@LINE+4]]:1: error: invalid signature for builtin function "type.and" [InvalidBuiltinSignature] +// CHECK:STDERR: fn TooFew(a: type) -> type = "type.and"; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: +fn TooFew(a: type) -> type = "type.and"; + +// CHECK:STDERR: fail_bad_decl.carbon:[[@LINE+4]]:1: error: invalid signature for builtin function "type.and" [InvalidBuiltinSignature] +// CHECK:STDERR: fn TooMany(a: type, b: type, c: type) -> type = "type.and"; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: +fn TooMany(a: type, b: type, c: type) -> type = "type.and"; + +// CHECK:STDERR: fail_bad_decl.carbon:[[@LINE+4]]:1: error: invalid signature for builtin function "type.and" [InvalidBuiltinSignature] +// CHECK:STDERR: fn ParamNotType(a: {}, b: {}) -> type = "type.and"; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: +fn ParamNotType(a: {}, b: {}) -> type = "type.and"; + +// CHECK:STDERR: fail_bad_decl.carbon:[[@LINE+4]]:1: error: invalid signature for builtin function "type.and" [InvalidBuiltinSignature] +// CHECK:STDERR: fn ResultNotType(a: type, b: type) -> {} = "type.and"; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: +fn ResultNotType(a: type, b: type) -> {} = "type.and"; + +// CHECK:STDERR: fail_bad_decl.carbon:[[@LINE+4]]:1: error: invalid signature for builtin function "type.and" [InvalidBuiltinSignature] +// CHECK:STDERR: fn ResultNotSpecified(a: type, b: type) = "type.and"; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: +fn ResultNotSpecified(a: type, b: type) = "type.and"; diff --git a/toolchain/check/testdata/facet/min_prelude/call_combined_impl_witness.carbon b/toolchain/check/testdata/facet/min_prelude/call_combined_impl_witness.carbon index d4b6b748236c..994d35a518b4 100644 --- a/toolchain/check/testdata/facet/min_prelude/call_combined_impl_witness.carbon +++ b/toolchain/check/testdata/facet/min_prelude/call_combined_impl_witness.carbon @@ -65,7 +65,7 @@ fn F() { // CHECK:STDOUT: %assoc0.a29: %B.assoc_type = assoc_entity element0, @B.%BB.decl [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %complete_type: = 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: %AA.type.c29: type = fn_type @AA.2 [concrete] @@ -77,34 +77,28 @@ fn F() { // CHECK:STDOUT: %B.facet.82f: %B.type = facet_value %C, (%B.impl_witness) [concrete] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] -// CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T.8b3) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound.6b1: = bound_method %A.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method.96c: = bound_method %A.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound.56f: = bound_method %A.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type.d5f: type = facet_type <@Empty & @A> [concrete] -// CHECK:STDOUT: %Op.bound.b5b: = bound_method %facet_type.d5f, %Op.444 [concrete] -// CHECK:STDOUT: %bound_method.cb6: = bound_method %facet_type.d5f, %Op.specific_fn [concrete] +// CHECK:STDOUT: %Op.bound.e1a: = bound_method %facet_type.d5f, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type.242: type = facet_type <@Empty & @A & @B> [concrete] -// CHECK:STDOUT: %T.2df: %facet_type.242 = bind_symbolic_name T, 0 [symbolic] +// CHECK:STDOUT: %T: %facet_type.242 = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.8e7: type = pattern_type %facet_type.242 [concrete] -// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.2df [symbolic] +// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.9a0: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %require_complete.383: = require_complete_type %T.as_type [symbolic] -// CHECK:STDOUT: %A.lookup_impl_witness: = lookup_impl_witness %T.2df, @A [symbolic] +// CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] +// CHECK:STDOUT: %A.lookup_impl_witness: = lookup_impl_witness %T, @A [symbolic] // CHECK:STDOUT: %A.facet.487: %A.type = facet_value %T.as_type, (%A.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %.fde: type = fn_type_with_self_type %AA.type.b97, %A.facet.487 [symbolic] // CHECK:STDOUT: %impl.elem0.de2: %.fde = impl_witness_access %A.lookup_impl_witness, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.086: = specific_impl_function %impl.elem0.de2, @AA.1(%A.facet.487) [symbolic] -// CHECK:STDOUT: %B.lookup_impl_witness: = lookup_impl_witness %T.2df, @B [symbolic] +// CHECK:STDOUT: %B.lookup_impl_witness: = lookup_impl_witness %T, @B [symbolic] // CHECK:STDOUT: %B.facet.8d1: %B.type = facet_value %T.as_type, (%B.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %.368: type = fn_type_with_self_type %BB.type.64d, %B.facet.8d1 [symbolic] // CHECK:STDOUT: %impl.elem0.43b: %.368 = impl_witness_access %B.lookup_impl_witness, element0 [symbolic] @@ -125,8 +119,8 @@ fn F() { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.f92.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.f92.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl.f92 [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl.13c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -170,26 +164,22 @@ fn F() { // CHECK:STDOUT: %.loc33_20.1: type = splice_block %.loc33_20.3 [concrete = constants.%facet_type.242] { // CHECK:STDOUT: %A.ref.loc33: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %Empty.ref: type = name_ref Empty, file.%Empty.decl [concrete = constants.%Empty.type] -// CHECK:STDOUT: %impl.elem0.loc33_12: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc33_12.1: = bound_method %A.ref.loc33, %impl.elem0.loc33_12 [concrete = constants.%Op.bound.6b1] -// CHECK:STDOUT: %specific_fn.loc33_12: = specific_function %impl.elem0.loc33_12, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc33_12.2: = bound_method %A.ref.loc33, %specific_fn.loc33_12 [concrete = constants.%bound_method.96c] -// CHECK:STDOUT: %type.and.loc33_12: init type = call %bound_method.loc33_12.2(%A.ref.loc33, %Empty.ref) [concrete = constants.%facet_type.d5f] +// CHECK:STDOUT: %impl.elem0.loc33_12: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc33_12: = bound_method %A.ref.loc33, %impl.elem0.loc33_12 [concrete = constants.%Op.bound.56f] +// CHECK:STDOUT: %type.and.loc33_12: init type = call %bound_method.loc33_12(%A.ref.loc33, %Empty.ref) [concrete = constants.%facet_type.d5f] // CHECK:STDOUT: %B.ref.loc33: type = name_ref B, file.%B.decl [concrete = constants.%B.type] -// CHECK:STDOUT: %impl.elem0.loc33_20: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc33_20.1: = bound_method %type.and.loc33_12, %impl.elem0.loc33_20 [concrete = constants.%Op.bound.b5b] -// CHECK:STDOUT: %specific_fn.loc33_20: = specific_function %impl.elem0.loc33_20, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc33_20.2: = bound_method %type.and.loc33_12, %specific_fn.loc33_20 [concrete = constants.%bound_method.cb6] +// CHECK:STDOUT: %impl.elem0.loc33_20: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc33_20: = bound_method %type.and.loc33_12, %impl.elem0.loc33_20 [concrete = constants.%Op.bound.e1a] // CHECK:STDOUT: %.loc33_12.1: type = value_of_initializer %type.and.loc33_12 [concrete = constants.%facet_type.d5f] // CHECK:STDOUT: %.loc33_12.2: type = converted %type.and.loc33_12, %.loc33_12.1 [concrete = constants.%facet_type.d5f] -// CHECK:STDOUT: %type.and.loc33_20: init type = call %bound_method.loc33_20.2(%.loc33_12.2, %B.ref.loc33) [concrete = constants.%facet_type.242] +// CHECK:STDOUT: %type.and.loc33_20: init type = call %bound_method.loc33_20(%.loc33_12.2, %B.ref.loc33) [concrete = constants.%facet_type.242] // CHECK:STDOUT: %.loc33_20.2: type = value_of_initializer %type.and.loc33_20 [concrete = constants.%facet_type.242] // CHECK:STDOUT: %.loc33_20.3: type = converted %type.and.loc33_20, %.loc33_20.2 [concrete = constants.%facet_type.242] // CHECK:STDOUT: } -// CHECK:STDOUT: %T.loc33_6.1: %facet_type.242 = bind_symbolic_name T, 0 [symbolic = %T.loc33_6.2 (constants.%T.2df)] +// CHECK:STDOUT: %T.loc33_6.1: %facet_type.242 = bind_symbolic_name T, 0 [symbolic = %T.loc33_6.2 (constants.%T)] // CHECK:STDOUT: %t.param: @G.%T.as_type.loc33_28.2 (%T.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc33_28.1: type = splice_block %.loc33_28.2 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] { -// CHECK:STDOUT: %T.ref.loc33: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T.2df)] +// CHECK:STDOUT: %T.ref.loc33: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc33_28.1: type = facet_access_type %T.ref.loc33 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc33_28.2: type = converted %T.ref.loc33, %T.as_type.loc33_28.1 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: } @@ -255,7 +245,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type.357] +// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -281,12 +271,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc33_6.1: %facet_type.242) { -// CHECK:STDOUT: %T.loc33_6.2: %facet_type.242 = bind_symbolic_name T, 0 [symbolic = %T.loc33_6.2 (constants.%T.2df)] +// CHECK:STDOUT: %T.loc33_6.2: %facet_type.242 = bind_symbolic_name T, 0 [symbolic = %T.loc33_6.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc33_28.2: type = facet_access_type %T.loc33_6.2 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc33_28.2 [symbolic = %pattern_type (constants.%pattern_type.9a0)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc33_28.2 [symbolic = %require_complete (constants.%require_complete.383)] +// CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc33_28.2 [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: %A.lookup_impl_witness: = lookup_impl_witness %T.loc33_6.2, @A [symbolic = %A.lookup_impl_witness (constants.%A.lookup_impl_witness)] // CHECK:STDOUT: %A.facet.loc34: %A.type = facet_value %T.as_type.loc33_28.2, (%A.lookup_impl_witness) [symbolic = %A.facet.loc34 (constants.%A.facet.487)] // CHECK:STDOUT: %.loc34_4.2: type = fn_type_with_self_type constants.%AA.type.b97, %A.facet.loc34 [symbolic = %.loc34_4.2 (constants.%.fde)] @@ -302,45 +292,45 @@ fn F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %t.ref.loc34: @G.%T.as_type.loc33_28.2 (%T.as_type) = name_ref t, %t // CHECK:STDOUT: %AA.ref.loc34: %A.assoc_type = name_ref AA, @A.%assoc0 [concrete = constants.%assoc0.6e7] -// CHECK:STDOUT: %T.as_type.loc34: type = facet_access_type constants.%T.2df [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] -// CHECK:STDOUT: %.loc34_4.1: type = converted constants.%T.2df, %T.as_type.loc34 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] +// CHECK:STDOUT: %T.as_type.loc34: type = facet_access_type constants.%T [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] +// CHECK:STDOUT: %.loc34_4.1: type = converted constants.%T, %T.as_type.loc34 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %impl.elem0.loc34_4.1: @G.%.loc34_4.2 (%.fde) = impl_witness_access constants.%A.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc34_4.2 (constants.%impl.elem0.de2)] // CHECK:STDOUT: %specific_impl_fn.loc34_4.1: = specific_impl_function %impl.elem0.loc34_4.1, @AA.1(constants.%A.facet.487) [symbolic = %specific_impl_fn.loc34_4.2 (constants.%specific_impl_fn.086)] // CHECK:STDOUT: %.loc34_8: init %empty_tuple.type = call %specific_impl_fn.loc34_4.1() // CHECK:STDOUT: %t.ref.loc35: @G.%T.as_type.loc33_28.2 (%T.as_type) = name_ref t, %t // CHECK:STDOUT: %BB.ref.loc35: %B.assoc_type = name_ref BB, @B.%assoc0 [concrete = constants.%assoc0.a29] -// CHECK:STDOUT: %T.as_type.loc35: type = facet_access_type constants.%T.2df [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] -// CHECK:STDOUT: %.loc35_4.1: type = converted constants.%T.2df, %T.as_type.loc35 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] +// CHECK:STDOUT: %T.as_type.loc35: type = facet_access_type constants.%T [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] +// CHECK:STDOUT: %.loc35_4.1: type = converted constants.%T, %T.as_type.loc35 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %impl.elem0.loc35_4.1: @G.%.loc35_4.2 (%.368) = impl_witness_access constants.%B.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc35_4.2 (constants.%impl.elem0.43b)] // CHECK:STDOUT: %specific_impl_fn.loc35_4.1: = specific_impl_function %impl.elem0.loc35_4.1, @BB.1(constants.%B.facet.8d1) [symbolic = %specific_impl_fn.loc35_4.2 (constants.%specific_impl_fn.573)] // CHECK:STDOUT: %.loc35_8: init %empty_tuple.type = call %specific_impl_fn.loc35_4.1() -// CHECK:STDOUT: %T.ref.loc37: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T.2df)] +// CHECK:STDOUT: %T.ref.loc37: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T)] // CHECK:STDOUT: %AA.ref.loc37: %A.assoc_type = name_ref AA, @A.%assoc0 [concrete = constants.%assoc0.6e7] // CHECK:STDOUT: %T.as_type.loc37: type = facet_access_type %T.ref.loc37 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc37_4: type = converted %T.ref.loc37, %T.as_type.loc37 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %impl.elem0.loc37: @G.%.loc34_4.2 (%.fde) = impl_witness_access constants.%A.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc34_4.2 (constants.%impl.elem0.de2)] // CHECK:STDOUT: %specific_impl_fn.loc37: = specific_impl_function %impl.elem0.loc37, @AA.1(constants.%A.facet.487) [symbolic = %specific_impl_fn.loc34_4.2 (constants.%specific_impl_fn.086)] // CHECK:STDOUT: %.loc37_8: init %empty_tuple.type = call %specific_impl_fn.loc37() -// CHECK:STDOUT: %T.ref.loc38: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T.2df)] +// CHECK:STDOUT: %T.ref.loc38: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T)] // CHECK:STDOUT: %BB.ref.loc38: %B.assoc_type = name_ref BB, @B.%assoc0 [concrete = constants.%assoc0.a29] // CHECK:STDOUT: %T.as_type.loc38: type = facet_access_type %T.ref.loc38 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc38_4: type = converted %T.ref.loc38, %T.as_type.loc38 [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %impl.elem0.loc38: @G.%.loc35_4.2 (%.368) = impl_witness_access constants.%B.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc35_4.2 (constants.%impl.elem0.43b)] // CHECK:STDOUT: %specific_impl_fn.loc38: = specific_impl_function %impl.elem0.loc38, @BB.1(constants.%B.facet.8d1) [symbolic = %specific_impl_fn.loc35_4.2 (constants.%specific_impl_fn.573)] // CHECK:STDOUT: %.loc38_8: init %empty_tuple.type = call %specific_impl_fn.loc38() -// CHECK:STDOUT: %T.ref.loc40: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T.2df)] +// CHECK:STDOUT: %T.ref.loc40: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T)] // CHECK:STDOUT: %A.ref.loc40: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %AA.ref.loc40: %A.assoc_type = name_ref AA, @A.%assoc0 [concrete = constants.%assoc0.6e7] -// CHECK:STDOUT: %T.as_type.loc40: type = facet_access_type constants.%T.2df [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] +// CHECK:STDOUT: %T.as_type.loc40: type = facet_access_type constants.%T [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %A.facet.loc40: %A.type = facet_value %T.as_type.loc40, (constants.%A.lookup_impl_witness) [symbolic = %A.facet.loc34 (constants.%A.facet.487)] // CHECK:STDOUT: %.loc40_4: %A.type = converted %T.ref.loc40, %A.facet.loc40 [symbolic = %A.facet.loc34 (constants.%A.facet.487)] // CHECK:STDOUT: %impl.elem0.loc40: @G.%.loc34_4.2 (%.fde) = impl_witness_access constants.%A.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc34_4.2 (constants.%impl.elem0.de2)] // CHECK:STDOUT: %specific_impl_fn.loc40: = specific_impl_function %impl.elem0.loc40, @AA.1(constants.%A.facet.487) [symbolic = %specific_impl_fn.loc34_4.2 (constants.%specific_impl_fn.086)] // CHECK:STDOUT: %.loc40_12: init %empty_tuple.type = call %specific_impl_fn.loc40() -// CHECK:STDOUT: %T.ref.loc41: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T.2df)] +// CHECK:STDOUT: %T.ref.loc41: %facet_type.242 = name_ref T, %T.loc33_6.1 [symbolic = %T.loc33_6.2 (constants.%T)] // CHECK:STDOUT: %B.ref.loc41: type = name_ref B, file.%B.decl [concrete = constants.%B.type] // CHECK:STDOUT: %BB.ref.loc41: %B.assoc_type = name_ref BB, @B.%assoc0 [concrete = constants.%assoc0.a29] -// CHECK:STDOUT: %T.as_type.loc41: type = facet_access_type constants.%T.2df [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] +// CHECK:STDOUT: %T.as_type.loc41: type = facet_access_type constants.%T [symbolic = %T.as_type.loc33_28.2 (constants.%T.as_type)] // CHECK:STDOUT: %B.facet.loc41: %B.type = facet_value %T.as_type.loc41, (constants.%B.lookup_impl_witness) [symbolic = %B.facet.loc35 (constants.%B.facet.8d1)] // CHECK:STDOUT: %.loc41_4: %B.type = converted %T.ref.loc41, %B.facet.loc41 [symbolic = %B.facet.loc35 (constants.%B.facet.8d1)] // CHECK:STDOUT: %impl.elem0.loc41: @G.%.loc35_4.2 (%.368) = impl_witness_access constants.%B.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc35_4.2 (constants.%impl.elem0.43b)] @@ -377,8 +367,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @BB.1(constants.%B.facet.82f) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @G(constants.%T.2df) { -// CHECK:STDOUT: %T.loc33_6.2 => constants.%T.2df +// CHECK:STDOUT: specific @G(constants.%T) { +// CHECK:STDOUT: %T.loc33_6.2 => constants.%T // CHECK:STDOUT: %T.as_type.loc33_28.2 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.9a0 // CHECK:STDOUT: } @@ -393,7 +383,7 @@ fn F() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.357 +// CHECK:STDOUT: %require_complete => constants.%complete_type // CHECK:STDOUT: %A.lookup_impl_witness => constants.%A.impl_witness // CHECK:STDOUT: %A.facet.loc34 => constants.%A.facet.66c // CHECK:STDOUT: %.loc34_4.2 => constants.%.7ab diff --git a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_narrowed_facet_type.carbon b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_narrowed_facet_type.carbon index 20800b51fef3..c7dffb353e79 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_narrowed_facet_type.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_narrowed_facet_type.carbon @@ -96,9 +96,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Self.1b5: %Eats.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Self.fd4: %Animal.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %T.1b5: %Eats.type = bind_symbolic_name T, 0 [symbolic] +// CHECK:STDOUT: %T: %Eats.type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.a05: type = pattern_type %Eats.type [concrete] -// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.1b5 [symbolic] +// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.2b4: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -106,17 +106,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %require_complete.c75: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] -// CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl(%T.8b3) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound: = bound_method %Animal.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method: = bound_method %Animal.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound: = bound_method %Animal.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@Eats & @Animal> [concrete] // CHECK:STDOUT: %U: %facet_type = bind_symbolic_name U, 0 [symbolic] // CHECK:STDOUT: %pattern_type.787: type = pattern_type %facet_type [concrete] @@ -136,8 +131,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -157,10 +152,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %e.param_patt: @Feed.%pattern_type (%pattern_type.2b4) = value_param_pattern %e.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] -// CHECK:STDOUT: %T.loc6_9.1: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T.1b5)] +// CHECK:STDOUT: %T.loc6_9.1: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T)] // CHECK:STDOUT: %e.param: @Feed.%T.as_type.loc6_22.2 (%T.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc6_22.1: type = splice_block %.loc6_22.2 [symbolic = %T.as_type.loc6_22.2 (constants.%T.as_type)] { -// CHECK:STDOUT: %T.ref: %Eats.type = name_ref T, %T.loc6_9.1 [symbolic = %T.loc6_9.2 (constants.%T.1b5)] +// CHECK:STDOUT: %T.ref: %Eats.type = name_ref T, %T.loc6_9.1 [symbolic = %T.loc6_9.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc6_22.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc6_22.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc6_22.2: type = converted %T.ref, %T.as_type.loc6_22.1 [symbolic = %T.as_type.loc6_22.2 (constants.%T.as_type)] // CHECK:STDOUT: } @@ -174,11 +169,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.loc8_28.1: type = splice_block %.loc8_28.3 [concrete = constants.%facet_type] { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] -// CHECK:STDOUT: %impl.elem0: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc8_28.1: = bound_method %Animal.ref, %impl.elem0 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_28.2: = bound_method %Animal.ref, %specific_fn [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and: init type = call %bound_method.loc8_28.2(%Animal.ref, %Eats.ref) [concrete = constants.%facet_type] +// CHECK:STDOUT: %impl.elem0: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method: = bound_method %Animal.ref, %impl.elem0 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and: init type = call %bound_method(%Animal.ref, %Eats.ref) [concrete = constants.%facet_type] // CHECK:STDOUT: %.loc8_28.2: type = value_of_initializer %type.and [concrete = constants.%facet_type] // CHECK:STDOUT: %.loc8_28.3: type = converted %type.and, %.loc8_28.2 [concrete = constants.%facet_type] // CHECK:STDOUT: } @@ -210,7 +203,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%T.loc6_9.1: %Eats.type) { -// CHECK:STDOUT: %T.loc6_9.2: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T.1b5)] +// CHECK:STDOUT: %T.loc6_9.2: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc6_22.2: type = facet_access_type %T.loc6_9.2 [symbolic = %T.as_type.loc6_22.2 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc6_22.2 [symbolic = %pattern_type (constants.%pattern_type.2b4)] // CHECK:STDOUT: @@ -248,8 +241,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Feed(constants.%T.1b5) { -// CHECK:STDOUT: %T.loc6_9.2 => constants.%T.1b5 +// CHECK:STDOUT: specific @Feed(constants.%T) { +// CHECK:STDOUT: %T.loc6_9.2 => constants.%T // CHECK:STDOUT: %T.as_type.loc6_22.2 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.2b4 // CHECK:STDOUT: } @@ -281,17 +274,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl(%T) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound.9f8: = bound_method %Tame.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method.a56: = bound_method %Tame.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound.fc0: = bound_method %Tame.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type.6ff: type = facet_type <@Eats & @Tame> [concrete] // CHECK:STDOUT: %V: %facet_type.6ff = bind_symbolic_name V, 0 [symbolic] // CHECK:STDOUT: %pattern_type.9f3: type = pattern_type %facet_type.6ff [concrete] @@ -300,11 +288,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %FeedTame.type: type = fn_type @FeedTame [concrete] // CHECK:STDOUT: %FeedTame: %FeedTame.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.940: = require_complete_type %V.as_type [symbolic] -// CHECK:STDOUT: %Op.bound.d46: = bound_method %Eats.type, %Op.444 [concrete] -// CHECK:STDOUT: %bound_method.f8f: = bound_method %Eats.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %Op.bound.096: = bound_method %Eats.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type.c3f: type = facet_type <@Eats & @Animal> [concrete] -// CHECK:STDOUT: %Op.bound.c0a: = bound_method %facet_type.c3f, %Op.444 [concrete] -// CHECK:STDOUT: %bound_method.7fc: = bound_method %facet_type.c3f, %Op.specific_fn [concrete] +// CHECK:STDOUT: %Op.bound.e7d: = bound_method %facet_type.c3f, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type.a95: type = facet_type <@Eats & @Animal & @Tame> [concrete] // CHECK:STDOUT: %W: %facet_type.a95 = bind_symbolic_name W, 0 [symbolic] // CHECK:STDOUT: %pattern_type.f1b: type = pattern_type %facet_type.a95 [concrete] @@ -325,8 +311,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -350,11 +336,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.loc7_22.1: type = splice_block %.loc7_22.3 [concrete = constants.%facet_type.6ff] { // CHECK:STDOUT: %Tame.ref: type = name_ref Tame, file.%Tame.decl [concrete = constants.%Tame.type] // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] -// CHECK:STDOUT: %impl.elem0: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc7_22.1: = bound_method %Tame.ref, %impl.elem0 [concrete = constants.%Op.bound.9f8] -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc7_22.2: = bound_method %Tame.ref, %specific_fn [concrete = constants.%bound_method.a56] -// CHECK:STDOUT: %type.and: init type = call %bound_method.loc7_22.2(%Tame.ref, %Eats.ref) [concrete = constants.%facet_type.6ff] +// CHECK:STDOUT: %impl.elem0: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method: = bound_method %Tame.ref, %impl.elem0 [concrete = constants.%Op.bound.fc0] +// CHECK:STDOUT: %type.and: init type = call %bound_method(%Tame.ref, %Eats.ref) [concrete = constants.%facet_type.6ff] // CHECK:STDOUT: %.loc7_22.2: type = value_of_initializer %type.and [concrete = constants.%facet_type.6ff] // CHECK:STDOUT: %.loc7_22.3: type = converted %type.and, %.loc7_22.2 [concrete = constants.%facet_type.6ff] // CHECK:STDOUT: } @@ -375,19 +359,15 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.loc9_39.1: type = splice_block %.loc9_39.3 [concrete = constants.%facet_type.a95] { // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] -// CHECK:STDOUT: %impl.elem0.loc9_30: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc9_30.1: = bound_method %Eats.ref, %impl.elem0.loc9_30 [concrete = constants.%Op.bound.d46] -// CHECK:STDOUT: %specific_fn.loc9_30: = specific_function %impl.elem0.loc9_30, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_30.2: = bound_method %Eats.ref, %specific_fn.loc9_30 [concrete = constants.%bound_method.f8f] -// CHECK:STDOUT: %type.and.loc9_30: init type = call %bound_method.loc9_30.2(%Eats.ref, %Animal.ref) [concrete = constants.%facet_type.c3f] +// CHECK:STDOUT: %impl.elem0.loc9_30: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc9_30: = bound_method %Eats.ref, %impl.elem0.loc9_30 [concrete = constants.%Op.bound.096] +// CHECK:STDOUT: %type.and.loc9_30: init type = call %bound_method.loc9_30(%Eats.ref, %Animal.ref) [concrete = constants.%facet_type.c3f] // CHECK:STDOUT: %Tame.ref: type = name_ref Tame, file.%Tame.decl [concrete = constants.%Tame.type] -// CHECK:STDOUT: %impl.elem0.loc9_39: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc9_39.1: = bound_method %type.and.loc9_30, %impl.elem0.loc9_39 [concrete = constants.%Op.bound.c0a] -// CHECK:STDOUT: %specific_fn.loc9_39: = specific_function %impl.elem0.loc9_39, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_39.2: = bound_method %type.and.loc9_30, %specific_fn.loc9_39 [concrete = constants.%bound_method.7fc] +// CHECK:STDOUT: %impl.elem0.loc9_39: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc9_39: = bound_method %type.and.loc9_30, %impl.elem0.loc9_39 [concrete = constants.%Op.bound.e7d] // CHECK:STDOUT: %.loc9_30.1: type = value_of_initializer %type.and.loc9_30 [concrete = constants.%facet_type.c3f] // CHECK:STDOUT: %.loc9_30.2: type = converted %type.and.loc9_30, %.loc9_30.1 [concrete = constants.%facet_type.c3f] -// CHECK:STDOUT: %type.and.loc9_39: init type = call %bound_method.loc9_39.2(%.loc9_30.2, %Tame.ref) [concrete = constants.%facet_type.a95] +// CHECK:STDOUT: %type.and.loc9_39: init type = call %bound_method.loc9_39(%.loc9_30.2, %Tame.ref) [concrete = constants.%facet_type.a95] // CHECK:STDOUT: %.loc9_39.2: type = value_of_initializer %type.and.loc9_39 [concrete = constants.%facet_type.a95] // CHECK:STDOUT: %.loc9_39.3: type = converted %type.and.loc9_39, %.loc9_39.2 [concrete = constants.%facet_type.a95] // CHECK:STDOUT: } @@ -503,17 +483,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound.9f8: = bound_method %Tame.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method.a56: = bound_method %Tame.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound.fc0: = bound_method %Tame.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type.6ff: type = facet_type <@Eats & @Tame> [concrete] // CHECK:STDOUT: %V: %facet_type.6ff = bind_symbolic_name V, 0 [symbolic] // CHECK:STDOUT: %pattern_type.9f3: type = pattern_type %facet_type.6ff [concrete] @@ -522,8 +497,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %FeedTame2.type: type = fn_type @FeedTame2 [concrete] // CHECK:STDOUT: %FeedTame2: %FeedTame2.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.940: = require_complete_type %V.as_type [symbolic] -// CHECK:STDOUT: %Op.bound.fe3: = bound_method %Animal.type, %Op.444 [concrete] -// CHECK:STDOUT: %bound_method.a26: = bound_method %Animal.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %Op.bound.f48: = bound_method %Animal.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type.65c: type = facet_type <@Animal & @Tame> [concrete] // CHECK:STDOUT: %W: %facet_type.65c = bind_symbolic_name W, 0 [symbolic] // CHECK:STDOUT: %pattern_type.6e8: type = pattern_type %facet_type.65c [concrete] @@ -547,8 +521,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.f92.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.f92.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl.f92 [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl.13c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -584,11 +558,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.loc9_23.1: type = splice_block %.loc9_23.3 [concrete = constants.%facet_type.6ff] { // CHECK:STDOUT: %Tame.ref: type = name_ref Tame, file.%Tame.decl [concrete = constants.%Tame.type] // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] -// CHECK:STDOUT: %impl.elem0: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc9_23.1: = bound_method %Tame.ref, %impl.elem0 [concrete = constants.%Op.bound.9f8] -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_23.2: = bound_method %Tame.ref, %specific_fn [concrete = constants.%bound_method.a56] -// CHECK:STDOUT: %type.and: init type = call %bound_method.loc9_23.2(%Tame.ref, %Eats.ref) [concrete = constants.%facet_type.6ff] +// CHECK:STDOUT: %impl.elem0: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method: = bound_method %Tame.ref, %impl.elem0 [concrete = constants.%Op.bound.fc0] +// CHECK:STDOUT: %type.and: init type = call %bound_method(%Tame.ref, %Eats.ref) [concrete = constants.%facet_type.6ff] // CHECK:STDOUT: %.loc9_23.2: type = value_of_initializer %type.and [concrete = constants.%facet_type.6ff] // CHECK:STDOUT: %.loc9_23.3: type = converted %type.and, %.loc9_23.2 [concrete = constants.%facet_type.6ff] // CHECK:STDOUT: } @@ -609,11 +581,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.loc11_33.1: type = splice_block %.loc11_33.3 [concrete = constants.%facet_type.65c] { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %Tame.ref: type = name_ref Tame, file.%Tame.decl [concrete = constants.%Tame.type] -// CHECK:STDOUT: %impl.elem0: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc11_33.1: = bound_method %Animal.ref, %impl.elem0 [concrete = constants.%Op.bound.fe3] -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc11_33.2: = bound_method %Animal.ref, %specific_fn [concrete = constants.%bound_method.a26] -// CHECK:STDOUT: %type.and: init type = call %bound_method.loc11_33.2(%Animal.ref, %Tame.ref) [concrete = constants.%facet_type.65c] +// CHECK:STDOUT: %impl.elem0: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method: = bound_method %Animal.ref, %impl.elem0 [concrete = constants.%Op.bound.f48] +// CHECK:STDOUT: %type.and: init type = call %bound_method(%Animal.ref, %Tame.ref) [concrete = constants.%facet_type.65c] // CHECK:STDOUT: %.loc11_33.2: type = value_of_initializer %type.and [concrete = constants.%facet_type.65c] // CHECK:STDOUT: %.loc11_33.3: type = converted %type.and, %.loc11_33.2 [concrete = constants.%facet_type.65c] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/impl/lookup/min_prelude/canonical_query_self.carbon b/toolchain/check/testdata/impl/lookup/min_prelude/canonical_query_self.carbon index 4043049ee8b4..10af31e7864e 100644 --- a/toolchain/check/testdata/impl/lookup/min_prelude/canonical_query_self.carbon +++ b/toolchain/check/testdata/impl/lookup/min_prelude/canonical_query_self.carbon @@ -68,28 +68,23 @@ fn G() { // CHECK:STDOUT: %assoc0.78c: %J.assoc_type = assoc_entity element0, @J.%JJ.decl [concrete] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] -// CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T.8b3) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound: = bound_method %I.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method: = bound_method %I.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound: = bound_method %I.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@I & @J> [concrete] -// CHECK:STDOUT: %T.527: %facet_type = bind_symbolic_name T, 0 [symbolic] +// CHECK:STDOUT: %T: %facet_type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.f8f: type = pattern_type %facet_type [concrete] -// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.527 [symbolic] +// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.a4f: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: %require_complete.df2: = require_complete_type %T.as_type [symbolic] -// CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %T.527, @I [symbolic] +// CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] +// CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %T, @I [symbolic] // CHECK:STDOUT: %I.facet.e75: %I.type = facet_value %T.as_type, (%I.lookup_impl_witness) [symbolic] -// CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %T.527, @J [symbolic] +// CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %T, @J [symbolic] // CHECK:STDOUT: %J.facet.fa4: %J.type = facet_value %T.as_type, (%J.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %.935: type = fn_type_with_self_type %JJ.type.622, %J.facet.fa4 [symbolic] // CHECK:STDOUT: %impl.elem0: %.935 = impl_witness_access %J.lookup_impl_witness, element0 [symbolic] @@ -107,7 +102,7 @@ fn G() { // CHECK:STDOUT: %JJ.9c9: %JJ.type.811 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.5df: %J.type = facet_value %C, (%J.impl_witness) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.638: type = fn_type_with_self_type %JJ.type.622, %J.facet.5df [concrete] // CHECK:STDOUT: %facet_value: %facet_type = facet_value %C, (%I.impl_witness, %J.impl_witness) [concrete] @@ -120,8 +115,8 @@ fn G() { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.f92.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.f92.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl.f92 [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl.13c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -143,18 +138,16 @@ fn G() { // CHECK:STDOUT: %.loc22_12.1: type = splice_block %.loc22_12.3 [concrete = constants.%facet_type] { // CHECK:STDOUT: %I.ref.loc22: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: %J.ref.loc22: type = name_ref J, file.%J.decl [concrete = constants.%J.type] -// CHECK:STDOUT: %impl.elem0.loc22: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc22_12.1: = bound_method %I.ref.loc22, %impl.elem0.loc22 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0.loc22, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc22_12.2: = bound_method %I.ref.loc22, %specific_fn [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and: init type = call %bound_method.loc22_12.2(%I.ref.loc22, %J.ref.loc22) [concrete = constants.%facet_type] +// CHECK:STDOUT: %impl.elem0.loc22: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc22: = bound_method %I.ref.loc22, %impl.elem0.loc22 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and: init type = call %bound_method.loc22(%I.ref.loc22, %J.ref.loc22) [concrete = constants.%facet_type] // CHECK:STDOUT: %.loc22_12.2: type = value_of_initializer %type.and [concrete = constants.%facet_type] // CHECK:STDOUT: %.loc22_12.3: type = converted %type.and, %.loc22_12.2 [concrete = constants.%facet_type] // CHECK:STDOUT: } -// CHECK:STDOUT: %T.loc22_6.1: %facet_type = bind_symbolic_name T, 0 [symbolic = %T.loc22_6.2 (constants.%T.527)] +// CHECK:STDOUT: %T.loc22_6.1: %facet_type = bind_symbolic_name T, 0 [symbolic = %T.loc22_6.2 (constants.%T)] // CHECK:STDOUT: %t.param: @F.%T.as_type.loc22_20.2 (%T.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc22_20.1: type = splice_block %.loc22_20.2 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] { -// CHECK:STDOUT: %T.ref.loc22: %facet_type = name_ref T, %T.loc22_6.1 [symbolic = %T.loc22_6.2 (constants.%T.527)] +// CHECK:STDOUT: %T.ref.loc22: %facet_type = name_ref T, %T.loc22_6.1 [symbolic = %T.loc22_6.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc22_20.1: type = facet_access_type %T.ref.loc22 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc22_20.2: type = converted %T.ref.loc22, %T.as_type.loc22_20.1 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] // CHECK:STDOUT: } @@ -253,7 +246,7 @@ fn G() { // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (@impl.023.%JJ.decl), @impl.023 [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type.357] +// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -282,12 +275,12 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc22_6.1: %facet_type) { -// CHECK:STDOUT: %T.loc22_6.2: %facet_type = bind_symbolic_name T, 0 [symbolic = %T.loc22_6.2 (constants.%T.527)] +// CHECK:STDOUT: %T.loc22_6.2: %facet_type = bind_symbolic_name T, 0 [symbolic = %T.loc22_6.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc22_20.2: type = facet_access_type %T.loc22_6.2 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc22_20.2 [symbolic = %pattern_type (constants.%pattern_type.a4f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc22_20.2 [symbolic = %require_complete (constants.%require_complete.df2)] +// CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc22_20.2 [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %T.loc22_6.2, @I [symbolic = %I.lookup_impl_witness (constants.%I.lookup_impl_witness)] // CHECK:STDOUT: %I.facet.loc26_18.2: %I.type = facet_value %T.as_type.loc22_20.2, (%I.lookup_impl_witness) [symbolic = %I.facet.loc26_18.2 (constants.%I.facet.e75)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %T.loc22_6.2, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness)] @@ -299,9 +292,9 @@ fn G() { // CHECK:STDOUT: fn(%t.param: @F.%T.as_type.loc22_20.2 (%T.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %t.ref: @F.%T.as_type.loc22_20.2 (%T.as_type) = name_ref t, %t -// CHECK:STDOUT: %T.ref.loc26: %facet_type = name_ref T, %T.loc22_6.1 [symbolic = %T.loc22_6.2 (constants.%T.527)] +// CHECK:STDOUT: %T.ref.loc26: %facet_type = name_ref T, %T.loc22_6.1 [symbolic = %T.loc22_6.2 (constants.%T)] // CHECK:STDOUT: %I.ref.loc26_21: type = name_ref I, file.%I.decl [concrete = constants.%I.type] -// CHECK:STDOUT: %T.as_type.loc26_18: type = facet_access_type constants.%T.527 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] +// CHECK:STDOUT: %T.as_type.loc26_18: type = facet_access_type constants.%T [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] // CHECK:STDOUT: %I.facet.loc26_18.1: %I.type = facet_value %T.as_type.loc26_18, (constants.%I.lookup_impl_witness) [symbolic = %I.facet.loc26_18.2 (constants.%I.facet.e75)] // CHECK:STDOUT: %.loc26_18: %I.type = converted %T.ref.loc26, %I.facet.loc26_18.1 [symbolic = %I.facet.loc26_18.2 (constants.%I.facet.e75)] // CHECK:STDOUT: %as_type.loc26_24: type = facet_access_type %.loc26_18 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] @@ -322,8 +315,8 @@ fn G() { // CHECK:STDOUT: %as_type.loc26_67: type = facet_access_type %.loc26_63 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc26_67: type = converted %.loc26_63, %as_type.loc26_67 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] // CHECK:STDOUT: %JJ.ref: %J.assoc_type = name_ref JJ, @J.%assoc0 [concrete = constants.%assoc0.78c] -// CHECK:STDOUT: %T.as_type.loc26_69: type = facet_access_type constants.%T.527 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] -// CHECK:STDOUT: %.loc26_69.1: type = converted constants.%T.527, %T.as_type.loc26_69 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] +// CHECK:STDOUT: %T.as_type.loc26_69: type = facet_access_type constants.%T [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] +// CHECK:STDOUT: %.loc26_69.1: type = converted constants.%T, %T.as_type.loc26_69 [symbolic = %T.as_type.loc22_20.2 (constants.%T.as_type)] // CHECK:STDOUT: %impl.elem0.loc26_69.1: @F.%.loc26_69.2 (%.935) = impl_witness_access constants.%J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc26_69.2 (constants.%impl.elem0)] // CHECK:STDOUT: %bound_method.loc26_69: = bound_method %t.ref, %impl.elem0.loc26_69.1 // CHECK:STDOUT: %specific_impl_fn.loc26_69.1: = specific_impl_function %impl.elem0.loc26_69.1, @JJ.1(constants.%J.facet.fa4) [symbolic = %specific_impl_fn.loc26_69.2 (constants.%specific_impl_fn)] @@ -410,8 +403,8 @@ fn G() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.4ca // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F(constants.%T.527) { -// CHECK:STDOUT: %T.loc22_6.2 => constants.%T.527 +// CHECK:STDOUT: specific @F(constants.%T) { +// CHECK:STDOUT: %T.loc22_6.2 => constants.%T // CHECK:STDOUT: %T.as_type.loc22_20.2 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a4f // CHECK:STDOUT: } @@ -440,7 +433,7 @@ fn G() { // CHECK:STDOUT: %pattern_type => constants.%pattern_type.893 // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete => constants.%complete_type.357 +// CHECK:STDOUT: %require_complete => constants.%complete_type // CHECK:STDOUT: %I.lookup_impl_witness => constants.%I.impl_witness // CHECK:STDOUT: %I.facet.loc26_18.2 => constants.%I.facet.98f // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness diff --git a/toolchain/check/testdata/impl/lookup/min_prelude/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon b/toolchain/check/testdata/impl/lookup/min_prelude/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon index 201d36255023..d9a47689cb78 100644 --- a/toolchain/check/testdata/impl/lookup/min_prelude/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon +++ b/toolchain/check/testdata/impl/lookup/min_prelude/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon @@ -421,17 +421,12 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound: = bound_method %Z1.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method: = bound_method %Z1.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound: = bound_method %Z1.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@Z1 & @Z2> [concrete] // CHECK:STDOUT: %facet_value.74b: %facet_type = facet_value %empty_tuple.type, (%Z1.impl_witness, %Z2.impl_witness) [concrete] // CHECK:STDOUT: %Z1.facet: %Z1.type = facet_value %empty_tuple.type, (%Z1.impl_witness) [concrete] @@ -462,8 +457,8 @@ fn F() { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.f92.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.f92.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl.f92 [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl.13c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -672,11 +667,9 @@ fn F() { // CHECK:STDOUT: %.loc21_10: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %Z1.ref.loc21_16: type = name_ref Z1, file.%Z1.decl [concrete = constants.%Z1.type] // CHECK:STDOUT: %Z2.ref.loc21_21: type = name_ref Z2, file.%Z2.decl [concrete = constants.%Z2.type] -// CHECK:STDOUT: %impl.elem0.loc21_19: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc21_19.1: = bound_method %Z1.ref.loc21_16, %impl.elem0.loc21_19 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc21_19: = specific_function %impl.elem0.loc21_19, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc21_19.2: = bound_method %Z1.ref.loc21_16, %specific_fn.loc21_19 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc21_19: init type = call %bound_method.loc21_19.2(%Z1.ref.loc21_16, %Z2.ref.loc21_21) [concrete = constants.%facet_type] +// CHECK:STDOUT: %impl.elem0.loc21_19: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc21_19: = bound_method %Z1.ref.loc21_16, %impl.elem0.loc21_19 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc21_19: init type = call %bound_method.loc21_19(%Z1.ref.loc21_16, %Z2.ref.loc21_21) [concrete = constants.%facet_type] // CHECK:STDOUT: %.loc21_23.1: type = value_of_initializer %type.and.loc21_19 [concrete = constants.%facet_type] // CHECK:STDOUT: %.loc21_23.2: type = converted %type.and.loc21_19, %.loc21_23.1 [concrete = constants.%facet_type] // CHECK:STDOUT: %facet_value.loc21_12: %facet_type = facet_value constants.%empty_tuple.type, (constants.%Z1.impl_witness, constants.%Z2.impl_witness) [concrete = constants.%facet_value.74b] @@ -691,11 +684,9 @@ fn F() { // CHECK:STDOUT: %.loc21_35: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %Z1.ref.loc21_41: type = name_ref Z1, file.%Z1.decl [concrete = constants.%Z1.type] // CHECK:STDOUT: %Z2.ref.loc21_46: type = name_ref Z2, file.%Z2.decl [concrete = constants.%Z2.type] -// CHECK:STDOUT: %impl.elem0.loc21_44: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc21_44.1: = bound_method %Z1.ref.loc21_41, %impl.elem0.loc21_44 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc21_44: = specific_function %impl.elem0.loc21_44, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc21_44.2: = bound_method %Z1.ref.loc21_41, %specific_fn.loc21_44 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc21_44: init type = call %bound_method.loc21_44.2(%Z1.ref.loc21_41, %Z2.ref.loc21_46) [concrete = constants.%facet_type] +// CHECK:STDOUT: %impl.elem0.loc21_44: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc21_44: = bound_method %Z1.ref.loc21_41, %impl.elem0.loc21_44 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc21_44: init type = call %bound_method.loc21_44(%Z1.ref.loc21_41, %Z2.ref.loc21_46) [concrete = constants.%facet_type] // CHECK:STDOUT: %.loc21_48.1: type = value_of_initializer %type.and.loc21_44 [concrete = constants.%facet_type] // CHECK:STDOUT: %.loc21_48.2: type = converted %type.and.loc21_44, %.loc21_48.1 [concrete = constants.%facet_type] // CHECK:STDOUT: %facet_value.loc21_37: %facet_type = facet_value constants.%empty_tuple.type, (constants.%Z1.impl_witness, constants.%Z2.impl_witness) [concrete = constants.%facet_value.74b] diff --git a/toolchain/check/testdata/impl/min_prelude/forward_decls.carbon b/toolchain/check/testdata/impl/min_prelude/forward_decls.carbon index 71623ef4c23f..57ff7a175077 100644 --- a/toolchain/check/testdata/impl/min_prelude/forward_decls.carbon +++ b/toolchain/check/testdata/impl/min_prelude/forward_decls.carbon @@ -412,17 +412,12 @@ interface I { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound: = bound_method %I.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method: = bound_method %I.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound: = bound_method %I.type, %Op.0a6 [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: %Self.826: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: } @@ -433,8 +428,8 @@ interface I { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.f92.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.f92.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl.f92 [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl.13c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -451,11 +446,9 @@ interface I { // CHECK:STDOUT: %.loc4_7.2: type = converted %.loc4_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %I.ref.loc4_12: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] // CHECK:STDOUT: %I.ref.loc4_16: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] -// CHECK:STDOUT: %impl.elem0.loc4: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc4_14.1: = bound_method %I.ref.loc4_12, %impl.elem0.loc4 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc4: = specific_function %impl.elem0.loc4, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc4_14.2: = bound_method %I.ref.loc4_12, %specific_fn.loc4 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc4: init type = call %bound_method.loc4_14.2(%I.ref.loc4_12, %I.ref.loc4_16) [concrete = constants.%I.type] +// CHECK:STDOUT: %impl.elem0.loc4: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc4: = bound_method %I.ref.loc4_12, %impl.elem0.loc4 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc4: init type = call %bound_method.loc4(%I.ref.loc4_12, %I.ref.loc4_16) [concrete = constants.%I.type] // CHECK:STDOUT: } // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @impl.8dc [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness] @@ -467,11 +460,9 @@ interface I { // CHECK:STDOUT: %.loc7_7.2: type = converted %.loc7_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %I.ref.loc7_12: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] // CHECK:STDOUT: %I.ref.loc7_16: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] -// CHECK:STDOUT: %impl.elem0.loc7: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc7_14.1: = bound_method %I.ref.loc7_12, %impl.elem0.loc7 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc7: = specific_function %impl.elem0.loc7, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc7_14.2: = bound_method %I.ref.loc7_12, %specific_fn.loc7 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc7: init type = call %bound_method.loc7_14.2(%I.ref.loc7_12, %I.ref.loc7_16) [concrete = constants.%I.type] +// CHECK:STDOUT: %impl.elem0.loc7: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc7: = bound_method %I.ref.loc7_12, %impl.elem0.loc7 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc7: init type = call %bound_method.loc7(%I.ref.loc7_12, %I.ref.loc7_16) [concrete = constants.%I.type] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1333,17 +1324,12 @@ interface I { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound: = bound_method %I.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method: = bound_method %I.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound: = bound_method %I.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@I & @J> [concrete] // CHECK:STDOUT: %Self.826: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.ccd: %J.type = bind_symbolic_name Self, 0 [symbolic] @@ -1355,8 +1341,8 @@ interface I { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.f92.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.f92.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl.f92 [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl.13c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1375,11 +1361,9 @@ interface I { // CHECK:STDOUT: %.loc10_7.2: type = converted %.loc10_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] // CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl.loc4 [concrete = constants.%J.type] -// CHECK:STDOUT: %impl.elem0: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc10_14.1: = bound_method %I.ref, %impl.elem0 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc10_14.2: = bound_method %I.ref, %specific_fn [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and: init type = call %bound_method.loc10_14.2(%I.ref, %J.ref) [concrete = constants.%facet_type] +// CHECK:STDOUT: %impl.elem0: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method: = bound_method %I.ref, %impl.elem0 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and: init type = call %bound_method(%I.ref, %J.ref) [concrete = constants.%facet_type] // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl.loc12: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %J.decl.loc13: type = interface_decl @J [concrete = constants.%J.type] {} {} diff --git a/toolchain/check/testdata/interface/min_prelude/compound_member_access.carbon b/toolchain/check/testdata/interface/min_prelude/compound_member_access.carbon index 5320929f5836..d6127bc49a0f 100644 --- a/toolchain/check/testdata/interface/min_prelude/compound_member_access.carbon +++ b/toolchain/check/testdata/interface/min_prelude/compound_member_access.carbon @@ -481,14 +481,14 @@ fn Works() { // CHECK:STDOUT: %Q2: %Q2.type = struct_value () [concrete] // CHECK:STDOUT: %K2.assoc_type: type = assoc_entity_type @K2 [concrete] // CHECK:STDOUT: %assoc0.d67: %K2.assoc_type = assoc_entity element0, @K2.%Q2.decl [concrete] -// CHECK:STDOUT: %T.0ce: %K2.type = bind_symbolic_name T, 0 [symbolic] +// CHECK:STDOUT: %T: %K2.type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %pattern_type.fda: type = pattern_type %K2.type [concrete] -// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.0ce [symbolic] +// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %pattern_type.466ee6.1: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %Simple3.type: type = fn_type @Simple3 [concrete] // CHECK:STDOUT: %Simple3: %Simple3.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.022e81.1: = require_complete_type %T.as_type [symbolic] -// CHECK:STDOUT: %K2.lookup_impl_witness: = lookup_impl_witness %T.0ce, @K2 [symbolic] +// CHECK:STDOUT: %K2.lookup_impl_witness: = lookup_impl_witness %T, @K2 [symbolic] // CHECK:STDOUT: %K2.facet: %K2.type = facet_value %T.as_type, (%K2.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %.8de: type = fn_type_with_self_type %Q2.type, %K2.facet [symbolic] // CHECK:STDOUT: %impl.elem0: %.8de = impl_witness_access %K2.lookup_impl_witness, element0 [symbolic] @@ -526,10 +526,10 @@ fn Works() { // CHECK:STDOUT: %x.param_patt: @Simple3.%pattern_type (%pattern_type.466ee6.1) = value_param_pattern %x.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %K2.ref: type = name_ref K2, file.%K2.decl [concrete = constants.%K2.type] -// CHECK:STDOUT: %T.loc8_12.1: %K2.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T.0ce)] +// CHECK:STDOUT: %T.loc8_12.1: %K2.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T)] // CHECK:STDOUT: %x.param: @Simple3.%T.as_type.loc8_23.2 (%T.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc8_23.1: type = splice_block %.loc8_23.2 [symbolic = %T.as_type.loc8_23.2 (constants.%T.as_type)] { -// CHECK:STDOUT: %T.ref: %K2.type = name_ref T, %T.loc8_12.1 [symbolic = %T.loc8_12.2 (constants.%T.0ce)] +// CHECK:STDOUT: %T.ref: %K2.type = name_ref T, %T.loc8_12.1 [symbolic = %T.loc8_12.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc8_23.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc8_23.2 (constants.%T.as_type)] // CHECK:STDOUT: %.loc8_23.2: type = converted %T.ref, %T.as_type.loc8_23.1 [symbolic = %T.as_type.loc8_23.2 (constants.%T.as_type)] // CHECK:STDOUT: } @@ -568,7 +568,7 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple3(%T.loc8_12.1: %K2.type) { -// CHECK:STDOUT: %T.loc8_12.2: %K2.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T.0ce)] +// CHECK:STDOUT: %T.loc8_12.2: %K2.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc8_23.2: type = facet_access_type %T.loc8_12.2 [symbolic = %T.as_type.loc8_23.2 (constants.%T.as_type)] // CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc8_23.2 [symbolic = %pattern_type (constants.%pattern_type.466ee6.1)] // CHECK:STDOUT: @@ -584,8 +584,8 @@ fn Works() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: @Simple3.%T.as_type.loc8_23.2 (%T.as_type) = name_ref x, %x // CHECK:STDOUT: %Q2.ref: %K2.assoc_type = name_ref Q2, @K2.%assoc0 [concrete = constants.%assoc0.d67] -// CHECK:STDOUT: %T.as_type.loc9: type = facet_access_type constants.%T.0ce [symbolic = %T.as_type.loc8_23.2 (constants.%T.as_type)] -// CHECK:STDOUT: %.loc9_4.1: type = converted constants.%T.0ce, %T.as_type.loc9 [symbolic = %T.as_type.loc8_23.2 (constants.%T.as_type)] +// CHECK:STDOUT: %T.as_type.loc9: type = facet_access_type constants.%T [symbolic = %T.as_type.loc8_23.2 (constants.%T.as_type)] +// CHECK:STDOUT: %.loc9_4.1: type = converted constants.%T, %T.as_type.loc9 [symbolic = %T.as_type.loc8_23.2 (constants.%T.as_type)] // CHECK:STDOUT: %impl.elem0.loc9_4.1: @Simple3.%.loc9_4.2 (%.8de) = impl_witness_access constants.%K2.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_4.2 (constants.%impl.elem0)] // CHECK:STDOUT: %specific_impl_fn.loc9_4.1: = specific_impl_function %impl.elem0.loc9_4.1, @Q2(constants.%K2.facet) [symbolic = %specific_impl_fn.loc9_4.2 (constants.%specific_impl_fn)] // CHECK:STDOUT: %.loc9_8: init %empty_tuple.type = call %specific_impl_fn.loc9_4.1() @@ -613,8 +613,8 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Q2(constants.%Self.0ce) {} // CHECK:STDOUT: -// CHECK:STDOUT: specific @Simple3(constants.%T.0ce) { -// CHECK:STDOUT: %T.loc8_12.2 => constants.%T.0ce +// CHECK:STDOUT: specific @Simple3(constants.%T) { +// CHECK:STDOUT: %T.loc8_12.2 => constants.%T // CHECK:STDOUT: %T.as_type.loc8_23.2 => constants.%T.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.466ee6.1 // CHECK:STDOUT: } @@ -1165,7 +1165,7 @@ fn Works() { // CHECK:STDOUT: %assoc0.d52: %A.assoc_type = assoc_entity element0, @A.%G.decl [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %A.impl_witness: = impl_witness file.%A.impl_witness_table [concrete] // CHECK:STDOUT: %G.type.486: type = fn_type @G.2 [concrete] // CHECK:STDOUT: %G.001: %G.type.486 = struct_value () [concrete] @@ -1175,17 +1175,12 @@ fn Works() { // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound: = bound_method %A.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method: = bound_method %A.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound: = bound_method %A.type, %Op.0a6 [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: } @@ -1197,8 +1192,8 @@ fn Works() { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.f92.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.f92.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl.f92 [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl.13c [concrete] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1242,7 +1237,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type.357] +// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -1268,11 +1263,9 @@ fn Works() { // CHECK:STDOUT: %.loc22_7: ref %C = converted %.loc22_5.1, %.loc22_5.4 // 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: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc22_17.1: = bound_method %A.ref.loc22_15, %impl.elem0.loc22 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc22: = specific_function %impl.elem0.loc22, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc22_17.2: = bound_method %A.ref.loc22_15, %specific_fn.loc22 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc22: init type = call %bound_method.loc22_17.2(%A.ref.loc22_15, %A.ref.loc22_19) [concrete = constants.%A.type] +// CHECK:STDOUT: %impl.elem0.loc22: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc22: = bound_method %A.ref.loc22_15, %impl.elem0.loc22 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc22: init type = call %bound_method.loc22(%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 () @@ -1284,11 +1277,9 @@ fn Works() { // CHECK:STDOUT: %C.ref.loc30_18: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %A.ref.loc30_24: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %A.ref.loc30_28: type = name_ref A, file.%A.decl [concrete = constants.%A.type] -// CHECK:STDOUT: %impl.elem0.loc30_26: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc30_26.1: = bound_method %A.ref.loc30_24, %impl.elem0.loc30_26 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc30_26: = specific_function %impl.elem0.loc30_26, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc30_26.2: = bound_method %A.ref.loc30_24, %specific_fn.loc30_26 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc30_26: init type = call %bound_method.loc30_26.2(%A.ref.loc30_24, %A.ref.loc30_28) [concrete = constants.%A.type] +// CHECK:STDOUT: %impl.elem0.loc30_26: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc30_26: = bound_method %A.ref.loc30_24, %impl.elem0.loc30_26 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc30_26: init type = call %bound_method.loc30_26(%A.ref.loc30_24, %A.ref.loc30_28) [concrete = constants.%A.type] // CHECK:STDOUT: %.loc30_29.1: type = value_of_initializer %type.and.loc30_26 [concrete = constants.%A.type] // CHECK:STDOUT: %.loc30_29.2: type = converted %type.and.loc30_26, %.loc30_29.1 [concrete = constants.%A.type] // CHECK:STDOUT: %A.facet.loc30: %A.type = facet_value constants.%C, (constants.%A.impl_witness) [concrete = constants.%A.facet] @@ -1297,11 +1288,9 @@ fn Works() { // CHECK:STDOUT: %.loc30_30: type = converted %.loc30_20, %as_type.loc30 [concrete = constants.%C] // CHECK:STDOUT: %A.ref.loc30_35: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %A.ref.loc30_39: type = name_ref A, file.%A.decl [concrete = constants.%A.type] -// CHECK:STDOUT: %impl.elem0.loc30_37: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc30_37.1: = bound_method %A.ref.loc30_35, %impl.elem0.loc30_37 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc30_37: = specific_function %impl.elem0.loc30_37, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc30_37.2: = bound_method %A.ref.loc30_35, %specific_fn.loc30_37 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc30_37: init type = call %bound_method.loc30_37.2(%A.ref.loc30_35, %A.ref.loc30_39) [concrete = constants.%A.type] +// CHECK:STDOUT: %impl.elem0.loc30_37: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc30_37: = bound_method %A.ref.loc30_35, %impl.elem0.loc30_37 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc30_37: init type = call %bound_method.loc30_37(%A.ref.loc30_35, %A.ref.loc30_39) [concrete = constants.%A.type] // CHECK:STDOUT: %G.ref.loc30: %A.assoc_type = name_ref G, @A.%assoc0 [concrete = constants.%assoc0.d52] // CHECK:STDOUT: %.loc30_32: %A.type = converted %.loc30_8, [concrete = ] // CHECK:STDOUT: %.loc38_6.1: %empty_struct_type = struct_literal () @@ -1313,11 +1302,9 @@ fn Works() { // CHECK:STDOUT: %C.ref.loc38_18: type = name_ref C, file.%C.decl [concrete = constants.%C] // 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: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc38_26.1: = bound_method %A.ref.loc38_24, %impl.elem0.loc38 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc38: = specific_function %impl.elem0.loc38, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc38_26.2: = bound_method %A.ref.loc38_24, %specific_fn.loc38 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc38: init type = call %bound_method.loc38_26.2(%A.ref.loc38_24, %A.ref.loc38_28) [concrete = constants.%A.type] +// CHECK:STDOUT: %impl.elem0.loc38: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc38: = bound_method %A.ref.loc38_24, %impl.elem0.loc38 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc38: init type = call %bound_method.loc38(%A.ref.loc38_24, %A.ref.loc38_28) [concrete = constants.%A.type] // CHECK:STDOUT: %.loc38_29.1: type = value_of_initializer %type.and.loc38 [concrete = constants.%A.type] // CHECK:STDOUT: %.loc38_29.2: type = converted %type.and.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] @@ -1346,7 +1333,7 @@ fn Works() { // CHECK:STDOUT: %assoc0.d52: %A.assoc_type = assoc_entity element0, @A.%G.decl [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %A.impl_witness: = impl_witness file.%A.impl_witness_table [concrete] // CHECK:STDOUT: %G.type.486: type = fn_type @G.2 [concrete] // CHECK:STDOUT: %G.001: %G.type.486 = struct_value () [concrete] @@ -1355,17 +1342,12 @@ fn Works() { // CHECK:STDOUT: %Works: %Works.type = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] -// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] -// CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] -// CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness imports.%BitAnd.impl_witness_table, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] -// CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] -// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] -// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] -// CHECK:STDOUT: %Op.bound: = bound_method %A.type, %Op.444 [concrete] -// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] -// CHECK:STDOUT: %bound_method: = bound_method %A.type, %Op.specific_fn [concrete] +// CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness imports.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness) [concrete] +// CHECK:STDOUT: %.6bf: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.type.c1b: type = fn_type @Op.2 [concrete] +// CHECK:STDOUT: %Op.0a6: %Op.type.c1b = struct_value () [concrete] +// CHECK:STDOUT: %Op.bound: = bound_method %A.type, %Op.0a6 [concrete] // CHECK:STDOUT: %.e63: type = fn_type_with_self_type %G.type.c3a, %A.facet [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1375,8 +1357,8 @@ fn Works() { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.BitAnd: type = import_ref Core//prelude, BitAnd, loaded [concrete = constants.%BitAnd.type] -// CHECK:STDOUT: %Core.import_ref.1e6: @impl.f92.%Op.type (%Op.type.f99) = import_ref Core//prelude, loc22_42, loaded [symbolic = @impl.f92.%Op (constants.%Op.05a)] -// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.1e6), @impl.f92 [concrete] +// CHECK:STDOUT: %Core.import_ref.d90: %Op.type.c1b = import_ref Core//prelude, loc22_42, loaded [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (%Core.import_ref.d90), @impl.13c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1419,7 +1401,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type.357] +// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -1440,11 +1422,9 @@ fn Works() { // CHECK:STDOUT: %C.ref.loc13: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %A.ref.loc13_7: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %A.ref.loc13_11: type = name_ref A, file.%A.decl [concrete = constants.%A.type] -// CHECK:STDOUT: %impl.elem0.loc13_9: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc13_9.1: = bound_method %A.ref.loc13_7, %impl.elem0.loc13_9 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc13: = specific_function %impl.elem0.loc13_9, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc13_9.2: = bound_method %A.ref.loc13_7, %specific_fn.loc13 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc13: init type = call %bound_method.loc13_9.2(%A.ref.loc13_7, %A.ref.loc13_11) [concrete = constants.%A.type] +// CHECK:STDOUT: %impl.elem0.loc13_9: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc13: = bound_method %A.ref.loc13_7, %impl.elem0.loc13_9 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc13: init type = call %bound_method.loc13(%A.ref.loc13_7, %A.ref.loc13_11) [concrete = constants.%A.type] // CHECK:STDOUT: %G.ref.loc13: %A.assoc_type = name_ref G, @A.%assoc0 [concrete = constants.%assoc0.d52] // CHECK:STDOUT: %A.facet.loc13: %A.type = facet_value constants.%C, (constants.%A.impl_witness) [concrete = constants.%A.facet] // CHECK:STDOUT: %.loc13: %A.type = converted %C.ref.loc13, %A.facet.loc13 [concrete = constants.%A.facet] @@ -1453,33 +1433,27 @@ fn Works() { // CHECK:STDOUT: %C.ref.loc14: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %A.ref.loc14_10: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %A.ref.loc14_14: type = name_ref A, file.%A.decl [concrete = constants.%A.type] -// CHECK:STDOUT: %impl.elem0.loc14_12: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc14_12.1: = bound_method %A.ref.loc14_10, %impl.elem0.loc14_12 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc14_12: = specific_function %impl.elem0.loc14_12, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc14_12.2: = bound_method %A.ref.loc14_10, %specific_fn.loc14_12 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc14_12: init type = call %bound_method.loc14_12.2(%A.ref.loc14_10, %A.ref.loc14_14) [concrete = constants.%A.type] +// CHECK:STDOUT: %impl.elem0.loc14_12: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc14_12: = bound_method %A.ref.loc14_10, %impl.elem0.loc14_12 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc14_12: init type = call %bound_method.loc14_12(%A.ref.loc14_10, %A.ref.loc14_14) [concrete = constants.%A.type] // CHECK:STDOUT: %.loc14_15.1: type = value_of_initializer %type.and.loc14_12 [concrete = constants.%A.type] // CHECK:STDOUT: %.loc14_15.2: type = converted %type.and.loc14_12, %.loc14_15.1 [concrete = constants.%A.type] // CHECK:STDOUT: %A.facet.loc14: %A.type = facet_value constants.%C, (constants.%A.impl_witness) [concrete = constants.%A.facet] // CHECK:STDOUT: %.loc14_6: %A.type = converted %C.ref.loc14, %A.facet.loc14 [concrete = constants.%A.facet] // CHECK:STDOUT: %A.ref.loc14_20: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %A.ref.loc14_24: type = name_ref A, file.%A.decl [concrete = constants.%A.type] -// CHECK:STDOUT: %impl.elem0.loc14_22: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc14_22.1: = bound_method %A.ref.loc14_20, %impl.elem0.loc14_22 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc14_22: = specific_function %impl.elem0.loc14_22, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc14_22.2: = bound_method %A.ref.loc14_20, %specific_fn.loc14_22 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc14_22: init type = call %bound_method.loc14_22.2(%A.ref.loc14_20, %A.ref.loc14_24) [concrete = constants.%A.type] +// CHECK:STDOUT: %impl.elem0.loc14_22: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc14_22: = bound_method %A.ref.loc14_20, %impl.elem0.loc14_22 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc14_22: init type = call %bound_method.loc14_22(%A.ref.loc14_20, %A.ref.loc14_24) [concrete = constants.%A.type] // CHECK:STDOUT: %G.ref.loc14: %A.assoc_type = name_ref G, @A.%assoc0 [concrete = constants.%assoc0.d52] // CHECK:STDOUT: %impl.elem0.loc14_17: %.e63 = impl_witness_access constants.%A.impl_witness, element0 [concrete = constants.%G.001] // CHECK:STDOUT: %G.call.loc14: init %empty_tuple.type = call %impl.elem0.loc14_17() // CHECK:STDOUT: %C.ref.loc15: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %A.ref.loc15_10: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %A.ref.loc15_14: type = name_ref A, file.%A.decl [concrete = constants.%A.type] -// CHECK:STDOUT: %impl.elem0.loc15_12: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] -// CHECK:STDOUT: %bound_method.loc15_12.1: = bound_method %A.ref.loc15_10, %impl.elem0.loc15_12 [concrete = constants.%Op.bound] -// CHECK:STDOUT: %specific_fn.loc15: = specific_function %impl.elem0.loc15_12, @Op.2(type) [concrete = constants.%Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc15_12.2: = bound_method %A.ref.loc15_10, %specific_fn.loc15 [concrete = constants.%bound_method] -// CHECK:STDOUT: %type.and.loc15: init type = call %bound_method.loc15_12.2(%A.ref.loc15_10, %A.ref.loc15_14) [concrete = constants.%A.type] +// CHECK:STDOUT: %impl.elem0.loc15_12: %.6bf = impl_witness_access constants.%BitAnd.impl_witness, element0 [concrete = constants.%Op.0a6] +// CHECK:STDOUT: %bound_method.loc15: = bound_method %A.ref.loc15_10, %impl.elem0.loc15_12 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %type.and.loc15: init type = call %bound_method.loc15(%A.ref.loc15_10, %A.ref.loc15_14) [concrete = constants.%A.type] // CHECK:STDOUT: %.loc15_15.1: type = value_of_initializer %type.and.loc15 [concrete = constants.%A.type] // CHECK:STDOUT: %.loc15_15.2: type = converted %type.and.loc15, %.loc15_15.1 [concrete = constants.%A.type] // CHECK:STDOUT: %A.facet.loc15: %A.type = facet_value constants.%C, (constants.%A.impl_witness) [concrete = constants.%A.facet] diff --git a/toolchain/sem_ir/builtin_function_kind.cpp b/toolchain/sem_ir/builtin_function_kind.cpp index f227bc9ec17f..308fce6dcbd2 100644 --- a/toolchain/sem_ir/builtin_function_kind.cpp +++ b/toolchain/sem_ir/builtin_function_kind.cpp @@ -128,18 +128,6 @@ struct AnyFloat { // Constraint that requires the type to be the type type. using Type = BuiltinType; -// Constraint that requires the type to be a type value, whose type is type -// type. Also accepts symbolic constant value types. -struct AnyType { - static auto Check(const File& sem_ir, ValidateState& state, TypeId type_id) - -> bool { - if (BuiltinType::Check(sem_ir, state, type_id)) { - return true; - } - return sem_ir.types().GetAsInst(type_id).type_id() == TypeType::TypeId; - } -}; - // Checks that the specified type matches the given type constraint. template auto Check(const File& sem_ir, ValidateState& state, TypeId type_id) -> bool { @@ -513,8 +501,8 @@ constexpr BuiltinInfo BoolNeq = {"bool.neq", ValidateSignatureBool>}; // "type.and": facet type combination. -constexpr BuiltinInfo TypeAnd = { - "type.and", ValidateSignatureAnyType>}; +constexpr BuiltinInfo TypeAnd = {"type.and", + ValidateSignatureType>}; } // namespace BuiltinFunctionInfo diff --git a/toolchain/testing/min_prelude/facet_types.carbon b/toolchain/testing/min_prelude/facet_types.carbon index 6e37b335b2d5..4da0c5061379 100644 --- a/toolchain/testing/min_prelude/facet_types.carbon +++ b/toolchain/testing/min_prelude/facet_types.carbon @@ -18,6 +18,6 @@ interface BitAnd { fn Op[self: Self](other: Self) -> Self; } -impl forall [T:! type] T as BitAnd { +impl type as BitAnd { fn Op[self: Self](other: Self) -> Self = "type.and"; }