Use GetConstantValueInSpecific to get the impl's specific interface after deduction (#7584)

During impl lookup, for each (generic) impl candidate, we form a
specific for that impl by deducing its generic arguments. Then we
compare the query interface against the impl's specific interface. That
comparison needs the deduced arguments applied to the impl's specific
interface. Previously we were doing this by getting the impl's
constraint facet type with the impl's specific applied (via
`GetConstantValueInSpecific()`) and then identifying that facet type
with the impl's deduced self.

Identify is a fairly expensive operation. It runs subst, trying to
replace `.Self` references. It walks named constraints. It collects
require declarations. We're looking at making it do _more_ in the future
too, including rewrite constraint resolution and collecting rewrite and
same-type constraints. For this reason we have a cache to make it cheap
on the second run, but it's still a very heavyweight operation to
involve in impl lookup, when all we want is to apply the impl's specific
to its target interface.

We almost have all the information we need to avoid the identification
step. We have the impl's specific after deduction. And we have the
SpecificInterface that the impl is targeting in the `Impl` struct. When
we form the specific for the impl itself, we resolve the declaration
block and form new constant values for all instructions in there, but
that does not cover the SpecificInterface that we're storing in the
`Impl` struct. So we add a new instruction to the impl's eval block,
which will be symbolic when the impl is generic and the target interface
depends on a generic parameter. And we store the `InstId` in the `Impl`
struct. This allows us to gets its constant value later with the impl's
specific applied. From that constant value we can then pull out the
SpecificInterface that the impl is targeting.
This commit is contained in:
Dana Jansens
2026-07-30 19:59:10 +00:00
committed by GitHub
parent a683fb574b
commit a5ba0a0f45
154 changed files with 3001 additions and 2103 deletions
+24 -1
View File
@@ -252,6 +252,28 @@ static auto BuildImplDecl(Context& context, Parse::AnyImplDeclId node_id,
full_constraint_type_inst_id = SemIR::ErrorInst::TypeInstId;
}
// Store an instruction in the decl's eval block that contains the target
// interface's specific, whose constant value will be updated when specifics
// are applied to the impl.
//
// We can use ImplSelfWitness for this because it contains a
// SpecificInterfaceId operand, and it has a constant_kind of `Always` so it
// never evaluates to some other type of inst.
//
// TODO: We could avoid the extra indirection through a SpecificInterfaceId if
// we introduced a new instruction with a SpecificId operand instead of
// reusing ImplSelfWitness for this.
auto interface_inst_id =
specific_interface.interface_id.has_value()
? AddInst<SemIR::ImplSelfWitness>(
context, node_id,
{.type_id =
GetSingletonType(context, SemIR::WitnessType::TypeInstId),
.period_self = self_type_inst_id,
.specific_interface_id =
context.specific_interfaces().Add(specific_interface)})
: SemIR::ErrorInst::InstId;
// Strip off anything on the RHS of `where`, as they are not part of the
// constraint being implemented, they just represent requirements that must be
// met when the impl is defined. This drops any `.Self` references from the
@@ -282,7 +304,8 @@ static auto BuildImplDecl(Context& context, Parse::AnyImplDeclId node_id,
.is_final = is_final,
.self_id = self_type_inst_id,
.constraint_id = extend_constraint_type_inst_id,
.interface = specific_interface}};
.interface = specific_interface,
.interface_inst_id = interface_inst_id}};
if (has_definition) {
impl.definition_id = impl_decl_id;
}
+25
View File
@@ -1030,4 +1030,29 @@ auto CheckConstraintIsInterface(Context& context, SemIR::LocId loc_id,
return identified.impl_as_target_interface();
}
auto GetImplInterfaceInSpecific(Context& context, const SemIR::Impl& impl,
SemIR::SpecificId specific_id)
-> SemIR::SpecificInterface {
if (!specific_id.has_value()) {
CARBON_CHECK(!impl.generic_id.has_value());
// The impl is not generic, the specific interface will be concrete.
return impl.interface;
}
CARBON_CHECK(context.specifics().Get(specific_id).generic_id ==
impl.generic_id);
// The `interface_inst_id` is an instruction that contains the impl's target
// specific interface. We get its constant value to apply the impl's specific
// to that target interface.
auto interface_in_specific = SemIR::GetConstantValueInSpecific(
context.sem_ir(), specific_id, impl.interface_inst_id);
if (interface_in_specific == SemIR::ErrorInst::ConstantId) {
return SemIR::SpecificInterface::None;
}
// The `interface_inst_id` is always an `ImplSelfWitness` at this time.
auto inst = context.constant_values().GetInstAs<SemIR::ImplSelfWitness>(
interface_in_specific);
return context.specific_interfaces().Get(inst.specific_interface_id);
}
} // namespace Carbon::Check
+8
View File
@@ -7,6 +7,7 @@
#include "toolchain/check/context.h"
#include "toolchain/sem_ir/ids.h"
#include "toolchain/sem_ir/specific_interface.h"
namespace Carbon::Check {
@@ -99,6 +100,13 @@ auto CheckConstraintIsInterface(Context& context, SemIR::LocId loc_id,
SemIR::TypeInstId constraint_id)
-> SemIR::SpecificInterface;
// Given a specific for the impl, returns the specific interface that the impl
// declaration is implementing. Returns None in the case of an error being
// diagnosed while constructing the specific interface.
auto GetImplInterfaceInSpecific(Context& context, const SemIR::Impl& impl,
SemIR::SpecificId specific_id)
-> SemIR::SpecificInterface;
} // namespace Carbon::Check
#endif // CARBON_TOOLCHAIN_CHECK_IMPL_H_
+4 -33
View File
@@ -274,41 +274,12 @@ static auto TryGetSpecificWitnessIdForImpl(
return SemIR::ConstantId::None;
}
// The impl's constraint is a facet type which it is implementing for the self
// type: the `I` in `impl ... as I`. The deduction step may be unable to be
// fully applied to the types in the constraint and result in an error here,
// in which case it does not match the query.
auto deduced_constraint_id = SemIR::GetConstantValueInSpecific(
context.sem_ir(), specific_id, impl.constraint_id);
if (deduced_constraint_id == SemIR::ErrorInst::ConstantId) {
return SemIR::ConstantId::None;
}
// Get the identified facet type of the deduced impl's constraint, so we can
// get the specific interface being implemented after deduction.
auto deduced_constrant_type_inst_id =
context.types().GetTypeInstIdForTypeConstantId(deduced_constraint_id);
auto deduced_constraint_identified_facet_type_id =
TryToIdentifyFacetType(context, loc_id, deduced_self_const_id,
deduced_constrant_type_inst_id, false);
if (!deduced_constraint_identified_facet_type_id.has_value()) {
return SemIR::ConstantId::None;
}
const auto& deduced_constraint_identified_facet_type =
context.identified_facet_types().Get(
deduced_constraint_identified_facet_type_id);
// We only find valid impls in impl lookup, which implement a single specific
// interface.
CARBON_CHECK(
deduced_constraint_identified_facet_type.is_valid_impl_as_target());
// The specifics in the queried interface must match the deduced specifics in
// the impl's constraint facet type.
auto impl_interface_specific_id =
deduced_constraint_identified_facet_type.impl_as_target_interface()
.specific_id;
if (impl_interface_specific_id != query_specific_interface.specific_id) {
auto deduced_specific_interface =
GetImplInterfaceInSpecific(context, impl, specific_id);
if (deduced_specific_interface.specific_id !=
query_specific_interface.specific_id) {
return SemIR::ConstantId::None;
}
+11
View File
@@ -2766,6 +2766,7 @@ static auto ImportImplDecl(ImportContext& context,
.self_id = SemIR::TypeInstId::None,
.constraint_id = SemIR::TypeInstId::None,
.interface = SemIR::SpecificInterface::None,
.interface_inst_id = SemIR::InstId::None,
.witness_id = witness_id,
.scope_id = import_impl.is_complete() ? AddPlaceholderNameScope(context)
: SemIR::NameScopeId::None}});
@@ -2838,6 +2839,9 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
impl_id = impl_const_inst.impl_id;
}
CARBON_CHECK(resolver.import_types().Is<SemIR::WitnessType>(
resolver.import_insts().Get(import_impl.interface_inst_id).type_id()));
// Load constants for the definition.
auto implicit_param_patterns = GetLocalBlockImportRefInfo(
resolver, import_impl.implicit_param_patterns_id);
@@ -2847,6 +2851,8 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
GetLocalConstantId(resolver, import_impl.constraint_id);
auto match_first_inst_id =
GetLocalConstantInstId(resolver, import_impl.match_first_id);
auto interface_inst_const_id =
GetLocalConstantId(resolver, import_impl.interface_inst_id);
auto& new_impl = resolver.local_impls().Get(impl_id);
// Go directly to the simpler GetLocalConstantInstId to get an inst of the
// same type locally. This does not handle symbolic values in a way that they
@@ -2870,6 +2876,11 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
resolver, import_impl.constraint_id, constraint_const_id);
new_impl.interface = GetLocalSpecificInterface(
resolver, import_impl.interface, specific_interface_data);
new_impl.interface_inst_id = AddLoadedImportRef(
resolver,
GetSingletonType(resolver.local_context(),
SemIR::WitnessType::TypeInstId),
import_impl.interface_inst_id, interface_inst_const_id);
// The MatchFirstDecl can't be symbolic, so we don't need to make a
// LoadedImportRef instruction for it.
new_impl.match_first_id = match_first_inst_id;
+1 -1
View File
@@ -180,8 +180,8 @@ fn H() { G(3); }
// CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete]
// CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral, Core.IntLiteral, Core.IntLiteral) [concrete]
// CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%int_1, %int_2, %int_3.1ba) [concrete]
// CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete]
// CHECK:STDOUT: %From: Core.IntLiteral = symbolic_binding From, 0 [symbolic]
// CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete]
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.type.48d: type = fn_type @Int.as.ImplicitAs.impl.Convert, @Int.as.ImplicitAs.impl(%From) [symbolic]
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.0f9: %Int.as.ImplicitAs.impl.Convert.type.48d = struct_value () [symbolic]
// CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete]
File diff suppressed because it is too large Load Diff
@@ -177,7 +177,7 @@ class A {
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.740: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet) [concrete]
// CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f6c: <bound method> = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %bound_method.c9d: <bound method> = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
@@ -255,7 +255,7 @@ class A {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -431,7 +431,7 @@ class A {
// CHECK:STDOUT: %pattern_type.f70: type = pattern_type %Circle [concrete]
// CHECK:STDOUT: %self.param_patt.769: %pattern_type.f70 = value_param_pattern [concrete]
// CHECK:STDOUT: %self.patt.cfb: %pattern_type.f70 = at_binding_pattern self, %self.param_patt.769 [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %Circle.GetRadius.type: type = fn_type @Circle.GetRadius [concrete]
@@ -506,7 +506,7 @@ class A {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc7: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc7: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param: %Circle = value_param call_param0
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle]
// CHECK:STDOUT: %self: %Circle = wrapper_binding self, %self.param
@@ -518,7 +518,7 @@ class A {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc11: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc11: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -529,7 +529,7 @@ class A {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc15: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param: %Circle = value_param call_param0
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle]
// CHECK:STDOUT: %self: %Circle = wrapper_binding self, %self.param
@@ -590,7 +590,7 @@ class B {
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.740: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet) [concrete]
// CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
@@ -667,7 +667,7 @@ class B {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc6: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc6: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -689,7 +689,7 @@ class B {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc14: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc14: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -698,7 +698,7 @@ class B {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc18: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc18: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -1052,7 +1052,7 @@ class B {
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.740: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet) [concrete]
// CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_86.bd3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %int_86.bd3, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
@@ -1150,7 +1150,7 @@ class B {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc25: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc25: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -1298,7 +1298,7 @@ class B {
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.740: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet) [concrete]
// CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %int_5.64b, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
@@ -1413,7 +1413,7 @@ class B {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -1424,7 +1424,7 @@ class B {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc36: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc36: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param: %B = value_param call_param0
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B]
// CHECK:STDOUT: %self: %B = wrapper_binding self, %self.param
+5 -5
View File
@@ -42,7 +42,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete]
// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %Class.F.type: type = fn_type @Class.F [concrete]
@@ -115,7 +115,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25_23 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc25_23: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc25: Core.Form = init_form %i32.loc25_23 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc25: Core.Form = init_form %i32.loc25_23 [concrete = constants.%.795f]
// CHECK:STDOUT: %n.param.loc25: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc25_15: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %n.loc25: %i32 = wrapper_binding n, %n.param.loc25
@@ -127,7 +127,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc29: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc29: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -141,7 +141,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc16_19 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc16_19: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32.loc16_19 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32.loc16_19 [concrete = constants.%.795f]
// CHECK:STDOUT: %n.param: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc16_11: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %n: %i32 = wrapper_binding n, %n.param
@@ -155,7 +155,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc25_23 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc20_19: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32.loc20_19 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32.loc20_19 [concrete = constants.%.795f]
// CHECK:STDOUT: %n.param.loc20: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc20_11: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %n.loc20: %i32 = wrapper_binding n, %n.param.loc20
@@ -133,7 +133,7 @@ var C: Class = {};
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @Class {
// CHECK:STDOUT: %.loc5_12: %Class.elem = field_decl field, element0, initializer = inst64000106 [concrete]
// CHECK:STDOUT: %.loc5_12: %Class.elem = field_decl field, element0, initializer = inst6400010D [concrete]
// CHECK:STDOUT: %int_123: Core.IntLiteral = int_value 123 [concrete = constants.%int_123.fff]
// CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39]
// CHECK:STDOUT: %bound_method.loc5_20.1: <bound method> = bound_method %int_123, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound]
+4 -4
View File
@@ -497,7 +497,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 {
// CHECK:STDOUT: %pattern_type.e90: type = pattern_type %Adapter [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete]
// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete]
@@ -542,7 +542,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc12: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc12: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %a.param: %Adapter = value_param call_param0
// CHECK:STDOUT: %Adapter.ref: type = name_ref Adapter, file.%Adapter.decl [concrete = constants.%Adapter]
// CHECK:STDOUT: %a: %Adapter = wrapper_binding a, %a.param
@@ -766,7 +766,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 {
// CHECK:STDOUT: %pattern_type.e90: type = pattern_type %Adapter [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.e90 = value_param_pattern [concrete]
// CHECK:STDOUT: %a.patt: %pattern_type.e90 = at_binding_pattern a, %a.param_patt [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %ImportedAccess.type: type = fn_type @ImportedAccess [concrete]
@@ -812,7 +812,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc6: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc6: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %a.param: %Adapter = value_param call_param0
// CHECK:STDOUT: %Adapter.ref: type = name_ref Adapter, imports.%Main.Adapter [concrete = constants.%Adapter]
// CHECK:STDOUT: %a: %Adapter = wrapper_binding a, %a.param
+2 -2
View File
@@ -107,7 +107,7 @@ class Class(U: type) {
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %CompleteClass.elem: type = unbound_element_type %CompleteClass.bae, %i32 [symbolic]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %CompleteClass.F.type: type = fn_type @CompleteClass.F, @CompleteClass(%T) [symbolic]
@@ -216,7 +216,7 @@ class Class(U: type) {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc8_13: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc8_13: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
+12 -4
View File
@@ -99,7 +99,7 @@ fn Test() -> i32 {
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -200,7 +200,7 @@ fn Test() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc12 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc12: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc12: Core.Form = init_form %i32.loc12 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc12: Core.Form = init_form %i32.loc12 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -492,6 +492,7 @@ fn Test() -> i32 {
// CHECK:STDOUT: %Inner.assoc_type.b6b: type = assoc_entity_type @Inner, @Inner(%T) [symbolic]
// CHECK:STDOUT: %assoc0.6dc: %Inner.assoc_type.b6b = assoc_entity element0, @Inner.WithSelf.%Inner.WithSelf.F.decl [symbolic]
// CHECK:STDOUT: %C.7d7: type = class_type @C, @C(%T) [symbolic]
// CHECK:STDOUT: %.229: <witness> = impl_self_witness %C.7d7, @Inner, @Inner(%T) [symbolic]
// CHECK:STDOUT: %Inner.impl_witness.d0a: <witness> = impl_witness @C.as.Inner.impl.%Inner.impl_witness_table, @C.as.Inner.impl(%T) [symbolic]
// CHECK:STDOUT: %require_complete.fcc: <witness> = require_complete_type %Inner.type.84b [symbolic]
// CHECK:STDOUT: %pattern_type.6fd: type = pattern_type %C.7d7 [symbolic]
@@ -522,6 +523,7 @@ fn Test() -> i32 {
// CHECK:STDOUT: %Outer.e7c: type = class_type @Outer, @Outer(%i32) [concrete]
// CHECK:STDOUT: %Inner.type.5cc: type = facet_type <@Inner, @Inner(%i32)> [concrete]
// CHECK:STDOUT: %C.b7f: type = class_type @C, @C(%i32) [concrete]
// CHECK:STDOUT: %.b97: <witness> = impl_self_witness %D, @Inner, @Inner(%i32) [concrete]
// CHECK:STDOUT: %Inner.impl_witness.8fa: <witness> = impl_witness @D.as.Inner.impl.%Inner.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.8b6: %Inner.type.5cc = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Inner.WithSelf.F.type.62d: type = fn_type @Inner.WithSelf.F, @Inner.WithSelf(%i32, %Self.656) [symbolic]
@@ -549,6 +551,7 @@ fn Test() -> i32 {
// CHECK:STDOUT: %c.var_patt: %pattern_type.9d0 = var_pattern %c.patt [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %C.val: %C.b7f = struct_value () [concrete]
// CHECK:STDOUT: %.38a: <witness> = impl_self_witness %C.b7f, @Inner, @Inner(%i32) [concrete]
// CHECK:STDOUT: %Inner.impl_witness.cdc: <witness> = impl_witness @C.as.Inner.impl.%Inner.impl_witness_table, @C.as.Inner.impl(%i32) [concrete]
// CHECK:STDOUT: %complete_type.11e: <witness> = complete_type_witness %Inner.type.5cc [concrete]
// CHECK:STDOUT: %C.as.Inner.impl.F.type.237: type = fn_type @C.as.Inner.impl.F, @C.as.Inner.impl(%i32) [concrete]
@@ -656,6 +659,7 @@ fn Test() -> i32 {
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.7d7)]
// CHECK:STDOUT: %Inner.type: type = facet_type <@Inner, @Inner(%T)> [symbolic = %Inner.type (constants.%Inner.type.84b)]
// CHECK:STDOUT: %.loc10_19: <witness> = impl_self_witness %C, @Inner, @Inner(%T) [symbolic = %.loc10_19 (constants.%.229)]
// CHECK:STDOUT: %Inner.impl_witness.loc10_19.2: <witness> = impl_witness %Inner.impl_witness_table, @C.as.Inner.impl(%T) [symbolic = %Inner.impl_witness.loc10_19.2 (constants.%Inner.impl_witness.d0a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -747,9 +751,10 @@ fn Test() -> i32 {
// CHECK:STDOUT: class {
// CHECK:STDOUT: impl_decl @C.as.Inner.impl [concrete] {} {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C.7d7 [symbolic = %C (constants.%C.7d7)]
// CHECK:STDOUT: %.loc10: type = specific_constant @Outer.%Inner.decl, @Outer(constants.%T) [symbolic = %Inner.type (constants.%Inner.type.84b)]
// CHECK:STDOUT: %Inner.ref: type = name_ref Inner, %.loc10 [symbolic = %Inner.type (constants.%Inner.type.84b)]
// CHECK:STDOUT: %.loc10_13: type = specific_constant @Outer.%Inner.decl, @Outer(constants.%T) [symbolic = %Inner.type (constants.%Inner.type.84b)]
// CHECK:STDOUT: %Inner.ref: type = name_ref Inner, %.loc10_13 [symbolic = %Inner.type (constants.%Inner.type.84b)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @C.as.Inner.impl.%Self.ref, @Inner, @Inner(constants.%T) [symbolic = @C.as.Inner.impl.%.loc10_19 (constants.%.229)]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -770,6 +775,7 @@ fn Test() -> i32 {
// CHECK:STDOUT: %.loc17: type = specific_constant @Outer.%Inner.decl, @Outer(constants.%i32) [concrete = constants.%Inner.type.5cc]
// CHECK:STDOUT: %Inner.ref: type = name_ref Inner, %.loc17 [concrete = constants.%Inner.type.5cc]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc17: <witness> = impl_self_witness @D.as.Inner.impl.%Self.ref, @Inner, @Inner(constants.%i32) [concrete = constants.%.b97]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -934,6 +940,7 @@ fn Test() -> i32 {
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %C => constants.%C.7d7
// CHECK:STDOUT: %Inner.type => constants.%Inner.type.84b
// CHECK:STDOUT: %.loc10_19 => constants.%.229
// CHECK:STDOUT: %Inner.impl_witness.loc10_19.2 => constants.%Inner.impl_witness.d0a
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1064,6 +1071,7 @@ fn Test() -> i32 {
// CHECK:STDOUT: %T => constants.%i32
// CHECK:STDOUT: %C => constants.%C.b7f
// CHECK:STDOUT: %Inner.type => constants.%Inner.type.5cc
// CHECK:STDOUT: %.loc10_19 => constants.%.38a
// CHECK:STDOUT: %Inner.impl_witness.loc10_19.2 => constants.%Inner.impl_witness.cdc
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -55,7 +55,7 @@ fn Call(p: Derived*) -> i32 {
// CHECK:STDOUT: %pattern_type.912: type = pattern_type %Base [concrete]
// CHECK:STDOUT: %self.param_patt.0db: %pattern_type.912 = value_param_pattern [concrete]
// CHECK:STDOUT: %self.patt.97c: %pattern_type.912 = at_binding_pattern self, %self.param_patt.0db [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %Derived.SelfBase.type: type = fn_type @Derived.SelfBase [concrete]
@@ -135,7 +135,7 @@ fn Call(p: Derived*) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc26: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc26: Core.Form = init_form %i32.loc26 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc26: Core.Form = init_form %i32.loc26 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param.loc26: %Base = value_param call_param0
// CHECK:STDOUT: %Base.ref.loc26: type = name_ref Base, file.%Base.decl [concrete = constants.%Base]
// CHECK:STDOUT: %self.loc26: %Base = wrapper_binding self, %self.param.loc26
@@ -157,7 +157,7 @@ fn Call(p: Derived*) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc34_25: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc34_25: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %p.param: %ptr.64c = value_param call_param0
// CHECK:STDOUT: %.loc34_19: type = splice_block %ptr [concrete = constants.%ptr.64c] {
// CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived]
@@ -190,7 +190,7 @@ fn Call(p: Derived*) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc22: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc22: Core.Form = init_form %i32.loc22 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc22: Core.Form = init_form %i32.loc22 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param.loc22: %Base = value_param call_param0
// CHECK:STDOUT: %Base.ref.loc22: type = name_ref Base, file.%Base.decl [concrete = constants.%Base]
// CHECK:STDOUT: %self.loc22: %Base = wrapper_binding self, %self.param.loc22
+2 -2
View File
@@ -37,7 +37,7 @@ class A {
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -127,7 +127,7 @@ class A {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
+12 -12
View File
@@ -75,7 +75,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -211,7 +211,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc24 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc24: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc24: Core.Form = init_form %i32.loc24 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc24: Core.Form = init_form %i32.loc24 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param.loc24: %Class = value_param call_param0
// CHECK:STDOUT: %Self.ref.loc24: type = name_ref Self, constants.%Class [concrete = constants.%Class]
// CHECK:STDOUT: %self.loc24: %Class = wrapper_binding self, %self.param.loc24
@@ -225,7 +225,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc28: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc28: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %c.param: %Class = value_param call_param0
// CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class]
// CHECK:STDOUT: %c: %Class = wrapper_binding c, %c.param
@@ -239,7 +239,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc34: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc34: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %c.param: %Class = value_param call_param0
// CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class]
// CHECK:STDOUT: %c: %Class = wrapper_binding c, %c.param
@@ -251,7 +251,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc38: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc38: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -260,7 +260,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc42: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc42: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -271,7 +271,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc47_38: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc47_38: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %p.param: %ptr.7ee = value_param call_param0
// CHECK:STDOUT: %.loc47_32: type = splice_block %ptr [concrete = constants.%ptr.7ee] {
// CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class]
@@ -288,7 +288,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc51_38: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc51_38: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %p.param: %ptr.7ee = value_param call_param0
// CHECK:STDOUT: %.loc51_32: type = splice_block %ptr [concrete = constants.%ptr.7ee] {
// CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class]
@@ -312,7 +312,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc57: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc57: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -321,7 +321,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc61: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc61: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -335,7 +335,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc24 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc16: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32.loc16 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32.loc16 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param.loc16: %Class = value_param call_param0
// CHECK:STDOUT: %Self.ref.loc16: type = name_ref Self, constants.%Class [concrete = constants.%Class]
// CHECK:STDOUT: %self.loc16: %Class = wrapper_binding self, %self.param.loc16
@@ -349,7 +349,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc17: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc17: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param: ref %Class = ref_param call_param0
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class]
// CHECK:STDOUT: %self: ref %Class = wrapper_binding self, %self.param
+3 -3
View File
@@ -30,7 +30,7 @@ class Class {
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -87,7 +87,7 @@ class Class {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -96,7 +96,7 @@ class Class {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
+4 -4
View File
@@ -40,7 +40,7 @@ fn Run() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -114,7 +114,7 @@ fn Run() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc25: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc25: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -127,7 +127,7 @@ fn Run() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc16: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -136,7 +136,7 @@ fn Run() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
+9 -9
View File
@@ -394,7 +394,7 @@ fn G() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -478,7 +478,7 @@ fn G() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc6_52: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc6_52: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %.loc6_13: type = splice_block %IntLiteral.ref [concrete = Core.IntLiteral] {
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
// CHECK:STDOUT: %Core.ref: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
@@ -500,7 +500,7 @@ fn G() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -1075,7 +1075,7 @@ fn G() {
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -1163,7 +1163,7 @@ fn G() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc7_52: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc7_52: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %.loc7_13: type = splice_block %IntLiteral.ref [concrete = Core.IntLiteral] {
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
// CHECK:STDOUT: %Core.ref: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
@@ -1185,7 +1185,7 @@ fn G() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc9: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc9: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -1349,7 +1349,7 @@ fn G() {
// CHECK:STDOUT: %pattern_type.f28: type = pattern_type %array_type.47c [symbolic]
// CHECK:STDOUT: %a.param_patt: %pattern_type.f28 = value_param_pattern [symbolic]
// CHECK:STDOUT: %a.patt.624: %pattern_type.f28 = at_binding_pattern a, %a.param_patt [symbolic]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
@@ -1423,7 +1423,7 @@ fn G() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_40 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc6_40: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc6_40: Core.Form = init_form %i32.loc6_40 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc6_40: Core.Form = init_form %i32.loc6_40 [concrete = constants.%.795f]
// CHECK:STDOUT: %.loc6_9: type = splice_block %i32.loc6_9 [concrete = constants.%i32] {
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
// CHECK:STDOUT: %i32.loc6_9: type = type_literal constants.%i32 [concrete = constants.%i32]
@@ -1451,7 +1451,7 @@ fn G() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
+3 -3
View File
@@ -846,7 +846,7 @@ fn G() -> i32 {
// CHECK:STDOUT: %pattern_type.e30: type = pattern_type %WithNontype.40e [symbolic]
// CHECK:STDOUT: %x.param_patt.12a: %pattern_type.e30 = value_param_pattern [symbolic]
// CHECK:STDOUT: %x.patt.e34: %pattern_type.e30 = at_binding_pattern x, %x.param_patt.12a [symbolic]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
@@ -943,7 +943,7 @@ fn G() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_43 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc6_43: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc6_43: Core.Form = init_form %i32.loc6_43 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc6_43: Core.Form = init_form %i32.loc6_43 [concrete = constants.%.795f]
// CHECK:STDOUT: %.loc6_9: type = splice_block %i32.loc6_9 [concrete = constants.%i32] {
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
// CHECK:STDOUT: %i32.loc6_9: type = type_literal constants.%i32 [concrete = constants.%i32]
@@ -964,7 +964,7 @@ fn G() -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc8: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
+3 -3
View File
@@ -297,7 +297,7 @@ fn G(pair: (C, D)) -> D {
// CHECK:STDOUT: %pattern_type.725: type = pattern_type %HasPair.72f [symbolic]
// CHECK:STDOUT: %h.param_patt.cdf: %pattern_type.725 = value_param_pattern [symbolic]
// CHECK:STDOUT: %h.patt.596: %pattern_type.725 = at_binding_pattern h, %h.param_patt.cdf [symbolic]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
@@ -397,7 +397,7 @@ fn G(pair: (C, D)) -> D {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc6_52 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc6_52: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc6_52: Core.Form = init_form %i32.loc6_52 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc6_52: Core.Form = init_form %i32.loc6_52 [concrete = constants.%.795f]
// CHECK:STDOUT: %.loc6_9: type = splice_block %i32.loc6_9 [concrete = constants.%i32] {
// CHECK:STDOUT: %.Self.frozen.loc6_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
// CHECK:STDOUT: %i32.loc6_9: type = type_literal constants.%i32 [concrete = constants.%i32]
@@ -429,7 +429,7 @@ fn G(pair: (C, D)) -> D {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc8_29: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc8_29: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %h.param: %HasPair.69b = value_param call_param0
// CHECK:STDOUT: %.loc8_23.1: type = splice_block %HasPair [concrete = constants.%HasPair.69b] {
// CHECK:STDOUT: %HasPair.ref: %HasPair.type = name_ref HasPair, file.%HasPair.decl [concrete = constants.%HasPair.generic]
+1 -1
View File
@@ -78,8 +78,8 @@ let n: array(i32, G()) = (1, 2, 3);
// CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.845: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74 = struct_value () [symbolic]
// CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete]
// CHECK:STDOUT: %From: Core.IntLiteral = symbolic_binding From, 0 [symbolic]
// CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete]
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.type.48d: type = fn_type @Int.as.ImplicitAs.impl.Convert, @Int.as.ImplicitAs.impl(%From) [symbolic]
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.0f9: %Int.as.ImplicitAs.impl.Convert.type.48d = struct_value () [symbolic]
// CHECK:STDOUT: %ImplicitAs.impl_witness.a23: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.b3c, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
+1 -1
View File
@@ -99,7 +99,7 @@ fn UseFGenerically(generic X: i32) {
// CHECK:STDERR: var unused v: F(X) = {};
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~
// CHECK:STDERR:
// CHECK:STDERR: fail_todo_dependent_call_type.carbon:[[@LINE+4]]:3: error: cannot access member of interface `Core.Destroy` in type `<cannot stringify inst7C000201: {kind: Call, arg0: inst7C000044, arg1: inst_block7C00008B, type: type(TypeType)}>` that does not implement that interface [MissingImplInMemberAccess]
// CHECK:STDERR: fail_todo_dependent_call_type.carbon:[[@LINE+4]]:3: error: cannot access member of interface `Core.Destroy` in type `<cannot stringify inst7C000219: {kind: Call, arg0: inst7C000044, arg1: inst_block7C00008B, type: type(TypeType)}>` that does not implement that interface [MissingImplInMemberAccess]
// CHECK:STDERR: var unused v: F(X) = {};
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~
// CHECK:STDERR:
@@ -66,14 +66,17 @@ fn F() {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.6ee: <witness> = impl_self_witness %C, @Empty [concrete]
// CHECK:STDOUT: %Empty.impl_witness: <witness> = impl_witness @C.as.Empty.impl.%Empty.impl_witness_table [concrete]
// CHECK:STDOUT: %Empty.facet: %Empty.type = facet_value %C, (%Empty.impl_witness) [concrete]
// CHECK:STDOUT: %.4e8: <witness> = impl_self_witness %C, @A [concrete]
// CHECK:STDOUT: %A.impl_witness: <witness> = impl_witness @C.as.A.impl.%A.impl_witness_table [concrete]
// CHECK:STDOUT: %C.as.A.impl.AA.type: type = fn_type @C.as.A.impl.AA [concrete]
// CHECK:STDOUT: %C.as.A.impl.AA: %C.as.A.impl.AA.type = struct_value () [concrete]
// CHECK:STDOUT: %A.facet.2ca: %A.type = facet_value %C, (%A.impl_witness) [concrete]
// CHECK:STDOUT: %A.WithSelf.AA.type.624: type = fn_type @A.WithSelf.AA, @A.WithSelf(%A.facet.2ca) [concrete]
// CHECK:STDOUT: %A.WithSelf.AA.879: %A.WithSelf.AA.type.624 = struct_value () [concrete]
// CHECK:STDOUT: %.827: <witness> = impl_self_witness %C, @B [concrete]
// CHECK:STDOUT: %B.impl_witness: <witness> = impl_witness @C.as.B.impl.%B.impl_witness_table [concrete]
// CHECK:STDOUT: %C.as.B.impl.BB.type: type = fn_type @C.as.B.impl.BB [concrete]
// CHECK:STDOUT: %C.as.B.impl.BB: %C.as.B.impl.BB.type = struct_value () [concrete]
@@ -173,14 +176,17 @@ fn F() {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %Empty.ref: type = name_ref Empty, file.%Empty.decl [concrete = constants.%Empty.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc25: <witness> = impl_self_witness @C.as.Empty.impl.%C.ref, @Empty [concrete = constants.%.6ee]
// CHECK:STDOUT: impl_decl @C.as.A.impl [concrete] {} {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc26: <witness> = impl_self_witness @C.as.A.impl.%C.ref, @A [concrete = constants.%.4e8]
// CHECK:STDOUT: impl_decl @C.as.B.impl [concrete] {} {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc29: <witness> = impl_self_witness @C.as.B.impl.%C.ref, @B [concrete = constants.%.827]
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %T.patt.loc33_7.1: %pattern_type.a67 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_7.2 (constants.%T.patt)]
// CHECK:STDOUT: %t.param_patt.loc33_25.1: @G.%pattern_type (%pattern_type.653) = value_param_pattern [symbolic = %t.param_patt.loc33_25.2 (constants.%t.param_patt.4f9)]
@@ -31,6 +31,7 @@ fn F() {
// CHECK:STDOUT: %Goat: type = class_type @Goat [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.629: <witness> = impl_self_witness %Goat, @Animal [concrete]
// CHECK:STDOUT: %Animal.impl_witness: <witness> = impl_witness @Goat.as.Animal.impl.%Animal.impl_witness_table [concrete]
// CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
@@ -68,6 +69,7 @@ fn F() {
// CHECK:STDOUT: %Goat.ref: type = name_ref Goat, file.%Goat.decl [concrete = constants.%Goat]
// CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @Goat.as.Animal.impl.%Goat.ref, @Animal [concrete = constants.%.629]
// CHECK:STDOUT: %WalkAnimal.decl: %WalkAnimal.type = fn_decl @WalkAnimal [concrete = constants.%WalkAnimal] {
// CHECK:STDOUT: %A.patt.loc20_31.1: %pattern_type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc20_31.2 (constants.%A.patt)]
// CHECK:STDOUT: } {
@@ -84,6 +84,7 @@ fn G() {
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %ImplsGeneric: type = class_type @ImplsGeneric [concrete]
// CHECK:STDOUT: %Generic.type.b40: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete]
// CHECK:STDOUT: %.e53: <witness> = impl_self_witness %ImplsGeneric, @Generic, @Generic(%GenericParam) [concrete]
// CHECK:STDOUT: %Generic.impl_witness: <witness> = impl_witness @ImplsGeneric.as.Generic.impl.%Generic.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.685: %Generic.type.b40 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Generic.WithSelf.F.type.e39: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%GenericParam, %Self.8ea1ea.1) [symbolic]
@@ -160,6 +161,7 @@ fn G() {
// CHECK:STDOUT: %GenericParam.ref: type = name_ref GenericParam, file.%GenericParam.decl [concrete = constants.%GenericParam]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%GenericParam)> [concrete = constants.%Generic.type.b40]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @ImplsGeneric.as.Generic.impl.%ImplsGeneric.ref, @Generic, @Generic(constants.%GenericParam) [concrete = constants.%.e53]
// CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] {
// CHECK:STDOUT: %T.patt.loc15_31.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_31.2 (constants.%T.patt)]
// CHECK:STDOUT: %U.patt.loc15_55.1: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_55.2 (constants.%U.patt.8a63c8.1)]
@@ -457,6 +459,7 @@ fn G() {
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %ImplsGeneric: type = class_type @ImplsGeneric [concrete]
// CHECK:STDOUT: %Generic.type.b40: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete]
// CHECK:STDOUT: %.e53: <witness> = impl_self_witness %ImplsGeneric, @Generic, @Generic(%GenericParam) [concrete]
// CHECK:STDOUT: %Generic.impl_witness: <witness> = impl_witness @ImplsGeneric.as.Generic.impl.%Generic.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.685: %Generic.type.b40 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Generic.WithSelf.F.type.e39: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%GenericParam, %Self.8ea) [symbolic]
@@ -533,6 +536,7 @@ fn G() {
// CHECK:STDOUT: %GenericParam.ref: type = name_ref GenericParam, file.%GenericParam.decl [concrete = constants.%GenericParam]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%GenericParam)> [concrete = constants.%Generic.type.b40]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @ImplsGeneric.as.Generic.impl.%ImplsGeneric.ref, @Generic, @Generic(constants.%GenericParam) [concrete = constants.%.e53]
// CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] {
// CHECK:STDOUT: %T.patt.loc15_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_23.2 (constants.%T.patt)]
// CHECK:STDOUT: %U.patt.loc15_47.1: @CallGenericMethod.%pattern_type.loc15_47 (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_47.2 (constants.%U.patt.8a6)]
@@ -44,6 +44,7 @@ fn F() {
// CHECK:STDOUT: %Goat: type = class_type @Goat [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.629: <witness> = impl_self_witness %Goat, @Animal [concrete]
// CHECK:STDOUT: %Animal.impl_witness: <witness> = impl_witness @Goat.as.Animal.impl.%Animal.impl_witness_table [concrete]
// CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
@@ -103,6 +104,7 @@ fn F() {
// CHECK:STDOUT: %Goat.ref: type = name_ref Goat, file.%Goat.decl [concrete = constants.%Goat]
// CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc20: <witness> = impl_self_witness @Goat.as.Animal.impl.%Goat.ref, @Animal [concrete = constants.%.629]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -116,6 +116,7 @@ fn B() {
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %ImplsGeneric: type = class_type @ImplsGeneric [concrete]
// CHECK:STDOUT: %Generic.type.b40: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete]
// CHECK:STDOUT: %.e53: <witness> = impl_self_witness %ImplsGeneric, @Generic, @Generic(%GenericParam) [concrete]
// CHECK:STDOUT: %Generic.impl_witness: <witness> = impl_witness @ImplsGeneric.as.Generic.impl.%Generic.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.685: %Generic.type.b40 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Generic.WithSelf.F.type.e39: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%GenericParam, %Self.8ea1ea.1) [symbolic]
@@ -219,6 +220,7 @@ fn B() {
// CHECK:STDOUT: %GenericParam.ref: type = name_ref GenericParam, file.%GenericParam.decl [concrete = constants.%GenericParam]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%GenericParam)> [concrete = constants.%Generic.type.b40]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @ImplsGeneric.as.Generic.impl.%ImplsGeneric.ref, @Generic, @Generic(constants.%GenericParam) [concrete = constants.%.e53]
// CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] {
// CHECK:STDOUT: %T.patt.loc15_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_23.2 (constants.%T.patt)]
// CHECK:STDOUT: %U.patt.loc15_32.1: @CallGenericMethod.%pattern_type.loc15_32 (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.8a6)]
@@ -534,6 +536,7 @@ fn B() {
// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %I.type.269: type = facet_type <@I, @I(%T.67d, %empty_tuple.type)> [symbolic]
// CHECK:STDOUT: %.78e: <witness> = impl_self_witness %C, @I, @I(%T.67d, %empty_tuple.type) [symbolic]
// CHECK:STDOUT: %I.impl_witness.a35: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %Self.7df: %I.type.269 = symbolic_binding Self, 2 [symbolic]
// CHECK:STDOUT: %require_complete.2dc: <witness> = require_complete_type %I.type.269 [symbolic]
@@ -554,6 +557,7 @@ fn B() {
// CHECK:STDOUT: %B.type: type = fn_type @B [concrete]
// CHECK:STDOUT: %B: %B.type = struct_value () [concrete]
// CHECK:STDOUT: %C.val: %C = struct_value () [concrete]
// CHECK:STDOUT: %.793: <witness> = impl_self_witness %C, @I, @I(%empty_struct_type, %empty_tuple.type) [concrete]
// CHECK:STDOUT: %I.impl_witness.a7c: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %complete_type.dfa: <witness> = complete_type_witness %I.type.722 [concrete]
// CHECK:STDOUT: %I.facet.831: %I.type.722 = facet_value %C, (%I.impl_witness.a7c) [concrete]
@@ -617,6 +621,7 @@ fn B() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @C.as.I.impl.%C.ref, @I, @I(constants.%T.67d, constants.%empty_tuple.type) [symbolic = @C.as.I.impl.%.loc7_37 (constants.%.78e)]
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {
// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.bd4 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.be3)]
// CHECK:STDOUT: %t.param_patt.loc9_28.1: @A.%pattern_type (%pattern_type.d7b) = value_param_pattern [symbolic = %t.param_patt.loc9_28.2 (constants.%t.param_patt.be8)]
@@ -669,6 +674,7 @@ fn B() {
// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47)]
// CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)]
// CHECK:STDOUT: %I.type.loc7_35.2: type = facet_type <@I, @I(%T.loc7_15.2, constants.%empty_tuple.type)> [symbolic = %I.type.loc7_35.2 (constants.%I.type.269)]
// CHECK:STDOUT: %.loc7_37: <witness> = impl_self_witness constants.%C, @I, @I(%T.loc7_15.2, constants.%empty_tuple.type) [symbolic = %.loc7_37 (constants.%.78e)]
// CHECK:STDOUT: %I.impl_witness.loc7_37.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc7_15.2) [symbolic = %I.impl_witness.loc7_37.2 (constants.%I.impl_witness.a35)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -760,6 +766,7 @@ fn B() {
// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt.d47
// CHECK:STDOUT: %T.loc7_15.2 => constants.%T.67d
// CHECK:STDOUT: %I.type.loc7_35.2 => constants.%I.type.269
// CHECK:STDOUT: %.loc7_37 => constants.%.78e
// CHECK:STDOUT: %I.impl_witness.loc7_37.2 => constants.%I.impl_witness.a35
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -799,6 +806,7 @@ fn B() {
// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt.d47
// CHECK:STDOUT: %T.loc7_15.2 => constants.%empty_struct_type
// CHECK:STDOUT: %I.type.loc7_35.2 => constants.%I.type.722
// CHECK:STDOUT: %.loc7_37 => constants.%.793
// CHECK:STDOUT: %I.impl_witness.loc7_37.2 => constants.%I.impl_witness.a7c
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -839,6 +847,7 @@ fn B() {
// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %I.type.269: type = facet_type <@I, @I(%T.67d, %empty_tuple.type)> [symbolic]
// CHECK:STDOUT: %.78e: <witness> = impl_self_witness %C, @I, @I(%T.67d, %empty_tuple.type) [symbolic]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %Self.7df: %I.type.269 = symbolic_binding Self, 2 [symbolic]
// CHECK:STDOUT: %require_complete.2dc: <witness> = require_complete_type %I.type.269 [symbolic]
@@ -908,6 +917,7 @@ fn B() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @C.as.I.impl.%C.ref, @I, @I(constants.%T.67d, constants.%empty_tuple.type) [symbolic = @C.as.I.impl.%.loc7_37 (constants.%.78e)]
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {
// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.5c6 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.c4c)]
// CHECK:STDOUT: %t.param_patt.loc9_28.1: @A.%pattern_type (%pattern_type.67d) = value_param_pattern [symbolic = %t.param_patt.loc9_28.2 (constants.%t.param_patt)]
@@ -960,6 +970,7 @@ fn B() {
// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47)]
// CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)]
// CHECK:STDOUT: %I.type.loc7_35.2: type = facet_type <@I, @I(%T.loc7_15.2, constants.%empty_tuple.type)> [symbolic = %I.type.loc7_35.2 (constants.%I.type.269)]
// CHECK:STDOUT: %.loc7_37: <witness> = impl_self_witness constants.%C, @I, @I(%T.loc7_15.2, constants.%empty_tuple.type) [symbolic = %.loc7_37 (constants.%.78e)]
// CHECK:STDOUT: %I.impl_witness.loc7_37.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc7_15.2) [symbolic = %I.impl_witness.loc7_37.2 (constants.%I.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1035,6 +1046,7 @@ fn B() {
// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt.d47
// CHECK:STDOUT: %T.loc7_15.2 => constants.%T.67d
// CHECK:STDOUT: %I.type.loc7_35.2 => constants.%I.type.269
// CHECK:STDOUT: %.loc7_37 => constants.%.78e
// CHECK:STDOUT: %I.impl_witness.loc7_37.2 => constants.%I.impl_witness
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -1092,6 +1104,7 @@ fn B() {
// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %C.ab0: type = class_type @C, @C(%T.67d, %empty_tuple.type) [symbolic]
// CHECK:STDOUT: %.c42: <witness> = impl_self_witness %C.ab0, @I [symbolic]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C.ab0, (%I.impl_witness) [symbolic]
// CHECK:STDOUT: %pattern_type.6cb: type = pattern_type %I.type [concrete]
@@ -1158,6 +1171,7 @@ fn B() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @C.as.I.impl.%C.loc7_30.1, @I [symbolic = @C.as.I.impl.%.loc7_37 (constants.%.c42)]
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {
// CHECK:STDOUT: %T.patt.loc9_7.1: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_7.2 (constants.%T.patt.1df)]
// CHECK:STDOUT: %t.param_patt.loc9_20.1: @A.%pattern_type (%pattern_type.b3a) = value_param_pattern [symbolic = %t.param_patt.loc9_20.2 (constants.%t.param_patt)]
@@ -1194,6 +1208,7 @@ fn B() {
// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47)]
// CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T.67d)]
// CHECK:STDOUT: %C.loc7_30.2: type = class_type @C, @C(%T.loc7_15.2, constants.%empty_tuple.type) [symbolic = %C.loc7_30.2 (constants.%C.ab0)]
// CHECK:STDOUT: %.loc7_37: <witness> = impl_self_witness %C.loc7_30.2, @I [symbolic = %.loc7_37 (constants.%.c42)]
// CHECK:STDOUT: %I.impl_witness.loc7_37.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc7_15.2) [symbolic = %I.impl_witness.loc7_37.2 (constants.%I.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1280,6 +1295,7 @@ fn B() {
// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt.d47
// CHECK:STDOUT: %T.loc7_15.2 => constants.%T.67d
// CHECK:STDOUT: %C.loc7_30.2 => constants.%C.ab0
// CHECK:STDOUT: %.loc7_37 => constants.%.c42
// CHECK:STDOUT: %I.impl_witness.loc7_37.2 => constants.%I.impl_witness
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -46,6 +46,7 @@ fn F() {
// CHECK:STDOUT: %Goat: type = class_type @Goat [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.629: <witness> = impl_self_witness %Goat, @Animal [concrete]
// CHECK:STDOUT: %Animal.impl_witness: <witness> = impl_witness @Goat.as.Animal.impl.%Animal.impl_witness_table [concrete]
// CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
@@ -95,6 +96,7 @@ fn F() {
// CHECK:STDOUT: %Goat.ref: type = name_ref Goat, file.%Goat.decl [concrete = constants.%Goat]
// CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22: <witness> = impl_self_witness @Goat.as.Animal.impl.%Goat.ref, @Animal [concrete = constants.%.629]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -579,6 +579,7 @@ fn CallsWithTypeExplicit(generic U: type) {
// CHECK:STDOUT: %A.patt: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic]
// CHECK:STDOUT: %A: %Animal.type = symbolic_binding A, 0 [symbolic]
// CHECK:STDOUT: %A.as_type: type = facet_access_type %A [symbolic]
// CHECK:STDOUT: %.2b4: <witness> = impl_self_witness %A.as_type, @Eats [symbolic]
// CHECK:STDOUT: %Eats.impl_witness.e08: <witness> = impl_witness @A.as_type.as.Eats.impl.%Eats.impl_witness_table, @A.as_type.as.Eats.impl(%A) [symbolic]
// CHECK:STDOUT: %Eats.facet: %Eats.type = facet_value %A.as_type, (%Eats.impl_witness.e08) [symbolic]
// CHECK:STDOUT: %BitAndWith.type.a06: type = generic_interface_type @BitAndWith [concrete]
@@ -618,6 +619,7 @@ fn CallsWithTypeExplicit(generic U: type) {
// CHECK:STDOUT: %Eats.lookup_impl_witness: <witness> = lookup_impl_witness %W, @Eats [symbolic]
// CHECK:STDOUT: %Animal.lookup_impl_witness: <witness> = lookup_impl_witness %W, @Animal [symbolic]
// CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %W.as_type, (%Animal.lookup_impl_witness) [symbolic]
// CHECK:STDOUT: %.2a6: <witness> = impl_self_witness %W.as_type, @Eats [symbolic]
// CHECK:STDOUT: %Eats.impl_witness.7a5: <witness> = impl_witness @A.as_type.as.Eats.impl.%Eats.impl_witness_table, @A.as_type.as.Eats.impl(%Animal.facet) [symbolic]
// CHECK:STDOUT: %.86f: require_specific_def_type = require_specific_def @A.as_type.as.Eats.impl(%Animal.facet) [symbolic]
// CHECK:STDOUT: %Tame.lookup_impl_witness: <witness> = lookup_impl_witness %W, @Tame [symbolic]
@@ -664,6 +666,7 @@ fn CallsWithTypeExplicit(generic U: type) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %A.loc7_15.1: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc7_15.2 (constants.%A)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @A.as_type.as.Eats.impl.%.loc7_25, @Eats [symbolic = @A.as_type.as.Eats.impl.%.loc7_35 (constants.%.2b4)]
// CHECK:STDOUT: %FeedTame2.decl: %FeedTame2.type = fn_decl @FeedTame2 [concrete = constants.%FeedTame2] {
// CHECK:STDOUT: %V.patt.loc9_15.1: %pattern_type.fbb = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_15.2 (constants.%V.patt)]
// CHECK:STDOUT: %v.param_patt.loc9_38.1: @FeedTame2.%pattern_type (%pattern_type.7b2) = value_param_pattern [symbolic = %v.param_patt.loc9_38.2 (constants.%v.param_patt.bb4)]
@@ -751,6 +754,7 @@ fn CallsWithTypeExplicit(generic U: type) {
// CHECK:STDOUT: %A.patt.loc7_15.2: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc7_15.2 (constants.%A.patt)]
// CHECK:STDOUT: %A.loc7_15.2: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc7_15.2 (constants.%A)]
// CHECK:STDOUT: %A.as_type.loc7_25.2: type = facet_access_type %A.loc7_15.2 [symbolic = %A.as_type.loc7_25.2 (constants.%A.as_type)]
// CHECK:STDOUT: %.loc7_35: <witness> = impl_self_witness %A.as_type.loc7_25.2, @Eats [symbolic = %.loc7_35 (constants.%.2b4)]
// CHECK:STDOUT: %Eats.impl_witness.loc7_35.2: <witness> = impl_witness %Eats.impl_witness_table, @A.as_type.as.Eats.impl(%A.loc7_15.2) [symbolic = %Eats.impl_witness.loc7_35.2 (constants.%Eats.impl_witness.e08)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -830,6 +834,7 @@ fn CallsWithTypeExplicit(generic U: type) {
// CHECK:STDOUT: %A.patt.loc7_15.2 => constants.%A.patt
// CHECK:STDOUT: %A.loc7_15.2 => constants.%A
// CHECK:STDOUT: %A.as_type.loc7_25.2 => constants.%A.as_type
// CHECK:STDOUT: %.loc7_35 => constants.%.2b4
// CHECK:STDOUT: %Eats.impl_witness.loc7_35.2 => constants.%Eats.impl_witness.e08
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -859,6 +864,7 @@ fn CallsWithTypeExplicit(generic U: type) {
// CHECK:STDOUT: %A.patt.loc7_15.2 => constants.%A.patt
// CHECK:STDOUT: %A.loc7_15.2 => constants.%Animal.facet
// CHECK:STDOUT: %A.as_type.loc7_25.2 => constants.%W.as_type
// CHECK:STDOUT: %.loc7_35 => constants.%.2a6
// CHECK:STDOUT: %Eats.impl_witness.loc7_35.2 => constants.%Eats.impl_witness.7a5
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -34,6 +34,7 @@ fn HandleAnimal[T: Animal](a: T) { Feed(a); }
// CHECK:STDOUT: %A.patt: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic]
// CHECK:STDOUT: %A: %Animal.type = symbolic_binding A, 0 [symbolic]
// CHECK:STDOUT: %A.as_type: type = facet_access_type %A [symbolic]
// CHECK:STDOUT: %.2b411f.1: <witness> = impl_self_witness %A.as_type, @Eats [symbolic]
// CHECK:STDOUT: %Eats.impl_witness.e0811c.1: <witness> = impl_witness @A.as_type.as.Eats.impl.%Eats.impl_witness_table, @A.as_type.as.Eats.impl(%A) [symbolic]
// CHECK:STDOUT: %Eats.facet.f93: %Eats.type = facet_value %A.as_type, (%Eats.impl_witness.e0811c.1) [symbolic]
// CHECK:STDOUT: %pattern_type.880: type = pattern_type %Eats.type [concrete]
@@ -57,6 +58,7 @@ fn HandleAnimal[T: Animal](a: T) { Feed(a); }
// CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete]
// CHECK:STDOUT: %require_complete.db4: <witness> = require_complete_type %T.as_type.01d [symbolic]
// CHECK:STDOUT: %Eats.lookup_impl_witness: <witness> = lookup_impl_witness %T.443, @Eats [symbolic]
// CHECK:STDOUT: %.2b411f.2: <witness> = impl_self_witness %T.as_type.01d, @Eats [symbolic]
// CHECK:STDOUT: %Eats.impl_witness.e0811c.2: <witness> = impl_witness @A.as_type.as.Eats.impl.%Eats.impl_witness_table, @A.as_type.as.Eats.impl(%T.443) [symbolic]
// CHECK:STDOUT: %.2fe: require_specific_def_type = require_specific_def @A.as_type.as.Eats.impl(%T.443) [symbolic]
// CHECK:STDOUT: %Eats.facet.934: %Eats.type = facet_value %T.as_type.01d, (%Eats.lookup_impl_witness) [symbolic]
@@ -96,6 +98,7 @@ fn HandleAnimal[T: Animal](a: T) { Feed(a); }
// CHECK:STDOUT: }
// CHECK:STDOUT: %A.loc18_15.1: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc18_15.2 (constants.%A)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @A.as_type.as.Eats.impl.%.loc18_25, @Eats [symbolic = @A.as_type.as.Eats.impl.%.loc18_35 (constants.%.2b411f.1)]
// CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] {
// CHECK:STDOUT: %T.patt.loc20_10.1: %pattern_type.880 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_10.2 (constants.%T.patt.9e8)]
// CHECK:STDOUT: %e.param_patt.loc20_26.1: @Feed.%pattern_type (%pattern_type.aed) = value_param_pattern [symbolic = %e.param_patt.loc20_26.2 (constants.%e.param_patt.0be)]
@@ -160,6 +163,7 @@ fn HandleAnimal[T: Animal](a: T) { Feed(a); }
// CHECK:STDOUT: %A.patt.loc18_15.2: %pattern_type.333 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc18_15.2 (constants.%A.patt)]
// CHECK:STDOUT: %A.loc18_15.2: %Animal.type = symbolic_binding A, 0 [symbolic = %A.loc18_15.2 (constants.%A)]
// CHECK:STDOUT: %A.as_type.loc18_25.2: type = facet_access_type %A.loc18_15.2 [symbolic = %A.as_type.loc18_25.2 (constants.%A.as_type)]
// CHECK:STDOUT: %.loc18_35: <witness> = impl_self_witness %A.as_type.loc18_25.2, @Eats [symbolic = %.loc18_35 (constants.%.2b411f.1)]
// CHECK:STDOUT: %Eats.impl_witness.loc18_35.2: <witness> = impl_witness %Eats.impl_witness_table, @A.as_type.as.Eats.impl(%A.loc18_15.2) [symbolic = %Eats.impl_witness.loc18_35.2 (constants.%Eats.impl_witness.e0811c.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -232,6 +236,7 @@ fn HandleAnimal[T: Animal](a: T) { Feed(a); }
// CHECK:STDOUT: %A.patt.loc18_15.2 => constants.%A.patt
// CHECK:STDOUT: %A.loc18_15.2 => constants.%A
// CHECK:STDOUT: %A.as_type.loc18_25.2 => constants.%A.as_type
// CHECK:STDOUT: %.loc18_35 => constants.%.2b411f.1
// CHECK:STDOUT: %Eats.impl_witness.loc18_35.2 => constants.%Eats.impl_witness.e0811c.1
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -261,6 +266,7 @@ fn HandleAnimal[T: Animal](a: T) { Feed(a); }
// CHECK:STDOUT: %A.patt.loc18_15.2 => constants.%A.patt
// CHECK:STDOUT: %A.loc18_15.2 => constants.%T.443
// CHECK:STDOUT: %A.as_type.loc18_25.2 => constants.%T.as_type.01d
// CHECK:STDOUT: %.loc18_35 => constants.%.2b411f.2
// CHECK:STDOUT: %Eats.impl_witness.loc18_35.2 => constants.%Eats.impl_witness.e0811c.2
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -43,6 +43,7 @@ fn F() {
// CHECK:STDOUT: %Grass: type = class_type @Grass [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.54a: <witness> = impl_self_witness %Grass, @Edible [concrete]
// CHECK:STDOUT: %Edible.impl_witness: <witness> = impl_witness @Grass.as.Edible.impl.%Edible.impl_witness_table [concrete]
// CHECK:STDOUT: %Edible.facet: %Edible.type = facet_value %Grass, (%Edible.impl_witness) [concrete]
// CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete]
@@ -66,11 +67,13 @@ fn F() {
// CHECK:STDOUT: %T.as_type.01d: type = facet_access_type %T.443 [symbolic]
// CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic]
// CHECK:STDOUT: %Eats.type.ceea62.1: type = facet_type <@Eats, @Eats(%U.as_type)> [symbolic]
// CHECK:STDOUT: %.23c3b4.1: <witness> = impl_self_witness %T.as_type.01d, @Eats, @Eats(%U.as_type) [symbolic]
// CHECK:STDOUT: %Eats.impl_witness.4ca0a7.1: <witness> = impl_witness @T.as_type.as.Eats.impl.%Eats.impl_witness_table, @T.as_type.as.Eats.impl(%T.443, %U) [symbolic]
// CHECK:STDOUT: %Self.e18: %Eats.type.ceea62.1 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %require_complete.54fb7e.1: <witness> = require_complete_type %Eats.type.ceea62.1 [symbolic]
// CHECK:STDOUT: %Eats.facet.509: %Eats.type.ceea62.1 = facet_value %T.as_type.01d, (%Eats.impl_witness.4ca0a7.1) [symbolic]
// CHECK:STDOUT: %Goat: type = class_type @Goat [concrete]
// CHECK:STDOUT: %.629: <witness> = impl_self_witness %Goat, @Animal [concrete]
// CHECK:STDOUT: %Animal.impl_witness: <witness> = impl_witness @Goat.as.Animal.impl.%Animal.impl_witness_table [concrete]
// CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete]
// CHECK:STDOUT: %Food.patt.bbd: %pattern_type.e90e = symbolic_binding_pattern Food, 0 [symbolic]
@@ -110,6 +113,7 @@ fn F() {
// CHECK:STDOUT: %require_complete.3cc: <witness> = require_complete_type %Food.as_type.24e [symbolic]
// CHECK:STDOUT: %Eats.type.ceea62.2: type = facet_type <@Eats, @Eats(%Food.as_type.24e)> [symbolic]
// CHECK:STDOUT: %Eats.lookup_impl_witness: <witness> = lookup_impl_witness %A, @Eats, @Eats(%Food.as_type.24e) [symbolic]
// CHECK:STDOUT: %.23c3b4.2: <witness> = impl_self_witness %A.as_type, @Eats, @Eats(%Food.as_type.24e) [symbolic]
// CHECK:STDOUT: %Eats.impl_witness.4ca0a7.2: <witness> = impl_witness @T.as_type.as.Eats.impl.%Eats.impl_witness_table, @T.as_type.as.Eats.impl(%A, %Food.5f8) [symbolic]
// CHECK:STDOUT: %require_complete.54fb7e.2: <witness> = require_complete_type %Eats.type.ceea62.2 [symbolic]
// CHECK:STDOUT: %.86d: require_specific_def_type = require_specific_def @T.as_type.as.Eats.impl(%A, %Food.5f8) [symbolic]
@@ -142,6 +146,7 @@ fn F() {
// CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete]
// CHECK:STDOUT: %Destroy.Op.bound.115: <bound method> = bound_method %.4ea, %Destroy.Op.1a2547.3 [concrete]
// CHECK:STDOUT: %Eats.type.682: type = facet_type <@Eats, @Eats(%Grass)> [concrete]
// CHECK:STDOUT: %.6da: <witness> = impl_self_witness %Goat, @Eats, @Eats(%Grass) [concrete]
// CHECK:STDOUT: %Eats.impl_witness.fd5: <witness> = impl_witness @T.as_type.as.Eats.impl.%Eats.impl_witness_table, @T.as_type.as.Eats.impl(%Animal.facet, %Edible.facet) [concrete]
// CHECK:STDOUT: %Self.3ec: %Eats.type.682 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %complete_type.70f: <witness> = complete_type_witness %Eats.type.682 [concrete]
@@ -183,6 +188,7 @@ fn F() {
// CHECK:STDOUT: %Grass.ref: type = name_ref Grass, file.%Grass.decl [concrete = constants.%Grass]
// CHECK:STDOUT: %Edible.ref: type = name_ref Edible, file.%Edible.decl [concrete = constants.%Edible.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @Grass.as.Edible.impl.%Grass.ref, @Edible [concrete = constants.%.54a]
// CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {}
// CHECK:STDOUT: %Eats.decl: %Eats.type.8ef = interface_decl @Eats [concrete = constants.%Eats.generic] {
// CHECK:STDOUT: %Food.patt.loc21_20.1: %pattern_type.98f = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc21_20.2 (constants.%Food.patt.d47)]
@@ -216,11 +222,13 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %U.loc26_26.1: %Edible.type = symbolic_binding U, 1 [symbolic = %U.loc26_26.2 (constants.%U)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc26: <witness> = impl_self_witness @T.as_type.as.Eats.impl.%.loc26_36, @Eats, @Eats(constants.%U.as_type) [symbolic = @T.as_type.as.Eats.impl.%.loc26_49 (constants.%.23c3b4.1)]
// CHECK:STDOUT: %Goat.decl: type = class_decl @Goat [concrete = constants.%Goat] {} {}
// CHECK:STDOUT: impl_decl @Goat.as.Animal.impl [concrete] {} {
// CHECK:STDOUT: %Goat.ref: type = name_ref Goat, file.%Goat.decl [concrete = constants.%Goat]
// CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc29: <witness> = impl_self_witness @Goat.as.Animal.impl.%Goat.ref, @Animal [concrete = constants.%.629]
// CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] {
// CHECK:STDOUT: %Food.patt.loc31_13.1: %pattern_type.e90e = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc31_13.2 (constants.%Food.patt.bbd)]
// CHECK:STDOUT: %T.patt.loc31_24.1: @Feed.%pattern_type.loc31_24 (%pattern_type.560) = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc31_24.2 (constants.%T.patt.02f)]
@@ -353,6 +361,7 @@ fn F() {
// CHECK:STDOUT: %T.as_type.loc26_36.2: type = facet_access_type %T.loc26_15.2 [symbolic = %T.as_type.loc26_36.2 (constants.%T.as_type.01d)]
// CHECK:STDOUT: %U.as_type.loc26_47.2: type = facet_access_type %U.loc26_26.2 [symbolic = %U.as_type.loc26_47.2 (constants.%U.as_type)]
// CHECK:STDOUT: %Eats.type.loc26_47.2: type = facet_type <@Eats, @Eats(%U.as_type.loc26_47.2)> [symbolic = %Eats.type.loc26_47.2 (constants.%Eats.type.ceea62.1)]
// CHECK:STDOUT: %.loc26_49: <witness> = impl_self_witness %T.as_type.loc26_36.2, @Eats, @Eats(%U.as_type.loc26_47.2) [symbolic = %.loc26_49 (constants.%.23c3b4.1)]
// CHECK:STDOUT: %Eats.impl_witness.loc26_49.2: <witness> = impl_witness %Eats.impl_witness_table, @T.as_type.as.Eats.impl(%T.loc26_15.2, %U.loc26_26.2) [symbolic = %Eats.impl_witness.loc26_49.2 (constants.%Eats.impl_witness.4ca0a7.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -537,6 +546,7 @@ fn F() {
// CHECK:STDOUT: %T.as_type.loc26_36.2 => constants.%T.as_type.01d
// CHECK:STDOUT: %U.as_type.loc26_47.2 => constants.%U.as_type
// CHECK:STDOUT: %Eats.type.loc26_47.2 => constants.%Eats.type.ceea62.1
// CHECK:STDOUT: %.loc26_49 => constants.%.23c3b4.1
// CHECK:STDOUT: %Eats.impl_witness.loc26_49.2 => constants.%Eats.impl_witness.4ca0a7.1
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -610,6 +620,7 @@ fn F() {
// CHECK:STDOUT: %T.as_type.loc26_36.2 => constants.%A.as_type
// CHECK:STDOUT: %U.as_type.loc26_47.2 => constants.%Food.as_type.24e
// CHECK:STDOUT: %Eats.type.loc26_47.2 => constants.%Eats.type.ceea62.2
// CHECK:STDOUT: %.loc26_49 => constants.%.23c3b4.2
// CHECK:STDOUT: %Eats.impl_witness.loc26_49.2 => constants.%Eats.impl_witness.4ca0a7.2
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -669,6 +680,7 @@ fn F() {
// CHECK:STDOUT: %T.as_type.loc26_36.2 => constants.%Goat
// CHECK:STDOUT: %U.as_type.loc26_47.2 => constants.%Grass
// CHECK:STDOUT: %Eats.type.loc26_47.2 => constants.%Eats.type.682
// CHECK:STDOUT: %.loc26_49 => constants.%.6da
// CHECK:STDOUT: %Eats.impl_witness.loc26_49.2 => constants.%Eats.impl_witness.fd5
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -50,6 +50,7 @@ fn F() {
// CHECK:STDOUT: %Goat: type = class_type @Goat [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.629: <witness> = impl_self_witness %Goat, @Animal [concrete]
// CHECK:STDOUT: %Animal.impl_witness: <witness> = impl_witness @Goat.as.Animal.impl.%Animal.impl_witness_table [concrete]
// CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
@@ -130,6 +131,7 @@ fn F() {
// CHECK:STDOUT: %Goat.ref: type = name_ref Goat, file.%Goat.decl [concrete = constants.%Goat]
// CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22: <witness> = impl_self_witness @Goat.as.Animal.impl.%Goat.ref, @Animal [concrete = constants.%.629]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -29,6 +29,7 @@ fn G() { F(Animal); }
// CHECK:STDOUT: %Self.23e: %Eats.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete]
// CHECK:STDOUT: %Self.f00: %Animal.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %.2cd: <witness> = impl_self_witness %Animal.type, @Eats [concrete]
// CHECK:STDOUT: %Eats.impl_witness: <witness> = impl_witness @Animal.type.as.Eats.impl.%Eats.impl_witness_table [concrete]
// CHECK:STDOUT: %Eats.facet: %Eats.type = facet_value %Animal.type, (%Eats.impl_witness) [concrete]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Eats.type [concrete]
@@ -63,6 +64,7 @@ fn G() { F(Animal); }
// 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: }
// CHECK:STDOUT: %.loc20: <witness> = impl_self_witness @Animal.type.as.Eats.impl.%Animal.ref, @Eats [concrete = constants.%.2cd]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern [concrete = constants.%e.param_patt]
// CHECK:STDOUT: %e.patt: %pattern_type = at_binding_pattern e, %e.param_patt [concrete = constants.%e.patt]
@@ -59,6 +59,7 @@ fn G() {
// CHECK:STDOUT: %WrongGenericParam: type = class_type @WrongGenericParam [concrete]
// CHECK:STDOUT: %ImplsGeneric: type = class_type @ImplsGeneric [concrete]
// CHECK:STDOUT: %Generic.type.b40: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete]
// CHECK:STDOUT: %.e53: <witness> = impl_self_witness %ImplsGeneric, @Generic, @Generic(%GenericParam) [concrete]
// CHECK:STDOUT: %Generic.impl_witness: <witness> = impl_witness @ImplsGeneric.as.Generic.impl.%Generic.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.685: %Generic.type.b40 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Generic.WithSelf.F.type.e39: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%GenericParam, %Self.8ea) [symbolic]
@@ -118,6 +119,7 @@ fn G() {
// CHECK:STDOUT: %GenericParam.ref: type = name_ref GenericParam, file.%GenericParam.decl [concrete = constants.%GenericParam]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%GenericParam)> [concrete = constants.%Generic.type.b40]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc23: <witness> = impl_self_witness @ImplsGeneric.as.Generic.impl.%ImplsGeneric.ref, @Generic, @Generic(constants.%GenericParam) [concrete = constants.%.e53]
// CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] {
// CHECK:STDOUT: %T.patt.loc27_31.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_31.2 (constants.%T.patt)]
// CHECK:STDOUT: %U.patt.loc27_55.1: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc27_55.2 (constants.%U.patt)]
@@ -62,6 +62,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), generic from: RuntimeConvertFrom
// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete]
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.286: type = facet_type <@ImplicitAs, @ImplicitAs(%RuntimeConvertTo)> [concrete]
// CHECK:STDOUT: %.291: <witness> = impl_self_witness %RuntimeConvertFrom, @ImplicitAs, @ImplicitAs(%RuntimeConvertTo) [concrete]
// CHECK:STDOUT: %ImplicitAs.impl_witness: <witness> = impl_witness @RuntimeConvertFrom.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.598: type = pattern_type %RuntimeConvertFrom [concrete]
// CHECK:STDOUT: %self.param_patt.c41: %pattern_type.598 = value_param_pattern [concrete]
@@ -148,6 +149,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, )), generic from: RuntimeConvertFrom
// CHECK:STDOUT: %RuntimeConvertTo.ref: type = name_ref RuntimeConvertTo, file.%RuntimeConvertTo.decl [concrete = constants.%RuntimeConvertTo]
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%RuntimeConvertTo)> [concrete = constants.%ImplicitAs.type.286]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22: <witness> = impl_self_witness @RuntimeConvertFrom.as.ImplicitAs.impl.%RuntimeConvertFrom.ref, @ImplicitAs, @ImplicitAs(constants.%RuntimeConvertTo) [concrete = constants.%.291]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %T.patt.loc27_7.1: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_7.2 (constants.%T.patt)]
// CHECK:STDOUT: %A.patt.loc27_35.1: @F.%pattern_type.loc27_35 (%pattern_type.e66) = symbolic_binding_pattern A, 1 [symbolic = %A.patt.loc27_35.2 (constants.%A.patt.aee)]
+4
View File
@@ -111,6 +111,7 @@ fn Read(generic y: Core.IntLiteral) {
// CHECK:STDOUT: %impl.elem1.4a6: %Destroy.type = impl_witness_access %.327, element1 [symbolic_self]
// CHECK:STDOUT: %impl.elem0.188: %facet_type.f48 = impl_witness_access %.327, element0 [symbolic_self]
// CHECK:STDOUT: %Iterate_where.type.131: type = facet_type <@Iterate where %impl.elem1.4a6 = %Destroy.facet.7bb and %impl.elem0.188 = %facet_value> [symbolic]
// CHECK:STDOUT: %.84c: <witness> = impl_self_witness %IntRange.2c4, @Iterate [symbolic]
// CHECK:STDOUT: %Iterate.impl_witness: <witness> = impl_witness @IntRange.as.Iterate.impl.%Iterate.impl_witness_table, @IntRange.as.Iterate.impl(%N) [symbolic]
// CHECK:STDOUT: %self.param_patt.5cc: %pattern_type.1ea = value_param_pattern [symbolic]
// CHECK:STDOUT: %self.patt.13b: %pattern_type.1ea = at_binding_pattern self, %self.param_patt.5cc [symbolic]
@@ -329,6 +330,7 @@ fn Read(generic y: Core.IntLiteral) {
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %Int.loc9_54.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.df6)]
// CHECK:STDOUT: %facet_value.loc9_85.1: %facet_type.f48 = facet_value %Int.loc9_54.1, (%Destroy.lookup_impl_witness, %Copy.lookup_impl_witness) [symbolic = %facet_value.loc9_85.1 (constants.%facet_value)]
// CHECK:STDOUT: %Iterate_where.type: type = facet_type <@Iterate where constants.%impl.elem1.4a6 = %Destroy.facet.loc9_54.1 and constants.%impl.elem0.188 = %facet_value.loc9_85.1> [symbolic = %Iterate_where.type (constants.%Iterate_where.type.131)]
// CHECK:STDOUT: %.loc9_87: <witness> = impl_self_witness %IntRange, @Iterate [symbolic = %.loc9_87 (constants.%.84c)]
// CHECK:STDOUT: %Iterate.impl_witness.loc9_87.2: <witness> = impl_witness %Iterate.impl_witness_table, @IntRange.as.Iterate.impl(%N) [symbolic = %Iterate.impl_witness.loc9_87.2 (constants.%Iterate.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -496,6 +498,7 @@ fn Read(generic y: Core.IntLiteral) {
// CHECK:STDOUT: %rewrite.loc9_73.2 = requirement_rewrite %impl.elem0.loc9_60.2, %.loc9_85.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @IntRange.as.Iterate.impl.%Self.ref, @Iterate [symbolic = @IntRange.as.Iterate.impl.%.loc9_87 (constants.%.84c)]
// CHECK:STDOUT: %.loc22: @IntRange.%IntRange.elem (%IntRange.elem.bed) = field_decl start, element0 [concrete]
// CHECK:STDOUT: %.loc23: @IntRange.%IntRange.elem (%IntRange.elem.bed) = field_decl end, element1 [concrete]
// CHECK:STDOUT: %complete_type.loc24_1.1: <witness> = complete_type_witness constants.%struct_type.start.end.d4d [symbolic = %complete_type.loc24_1.2 (constants.%complete_type.aa1)]
@@ -862,6 +865,7 @@ fn Read(generic y: Core.IntLiteral) {
// CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.df6
// CHECK:STDOUT: %facet_value.loc9_85.1 => constants.%facet_value
// CHECK:STDOUT: %Iterate_where.type => constants.%Iterate_where.type.131
// CHECK:STDOUT: %.loc9_87 => constants.%.84c
// CHECK:STDOUT: %Iterate.impl_witness.loc9_87.2 => constants.%Iterate.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
+4 -4
View File
@@ -32,7 +32,7 @@ fn RuntimeCall(a: i32, b: i32) -> i32 {
// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete]
// CHECK:STDOUT: %b.param_patt: %pattern_type.6b6 = value_param_pattern [concrete]
// CHECK:STDOUT: %b.patt: %pattern_type.6b6 = at_binding_pattern b, %b.param_patt [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %Add.type: type = fn_type @Add [concrete]
@@ -45,8 +45,8 @@ fn RuntimeCall(a: i32, b: i32) -> i32 {
// CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.845: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74 = struct_value () [symbolic]
// CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete]
// CHECK:STDOUT: %From: Core.IntLiteral = symbolic_binding From, 0 [symbolic]
// CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete]
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.type.48d: type = fn_type @Int.as.ImplicitAs.impl.Convert, @Int.as.ImplicitAs.impl(%From) [symbolic]
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.0f9: %Int.as.ImplicitAs.impl.Convert.type.48d = struct_value () [symbolic]
// CHECK:STDOUT: %ImplicitAs.impl_witness.a23: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.b3c, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
@@ -126,7 +126,7 @@ fn RuntimeCall(a: i32, b: i32) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_27 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc15_27: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15_27 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15_27 [concrete = constants.%.795f]
// CHECK:STDOUT: %a.param: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc15_11: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %a: %i32 = wrapper_binding a, %a.param
@@ -182,7 +182,7 @@ fn RuntimeCall(a: i32, b: i32) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc19_35 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc19_35: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc19: Core.Form = init_form %i32.loc19_35 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc19: Core.Form = init_form %i32.loc19_35 [concrete = constants.%.795f]
// CHECK:STDOUT: %a.param: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc19_19: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %a: %i32 = wrapper_binding a, %a.param
@@ -121,6 +121,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
// CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete]
// CHECK:STDOUT: %AddWith.type.7c6: type = facet_type <@AddWith, @AddWith(%i32.builtin)> [concrete]
// CHECK:STDOUT: %.417: <witness> = impl_self_witness %i32.builtin, @AddWith, @AddWith(%i32.builtin) [concrete]
// CHECK:STDOUT: %AddWith.impl_witness: <witness> = impl_witness @i32.builtin.as.AddWith.impl.%AddWith.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.9ab: %AddWith.type.7c6 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %AddWith.WithSelf.Op.type.aad: type = fn_type @AddWith.WithSelf.Op, @AddWith.WithSelf(%i32.builtin, %Self.8d5) [symbolic]
@@ -141,6 +142,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
// CHECK:STDOUT: %AddWith.WithSelf.Op.type.2dc: type = fn_type @AddWith.WithSelf.Op, @AddWith.WithSelf(%i32.builtin, %AddWith.facet) [concrete]
// CHECK:STDOUT: %AddWith.WithSelf.Op.921: %AddWith.WithSelf.Op.type.2dc = struct_value () [concrete]
// CHECK:STDOUT: %As.type.dfb: type = facet_type <@As, @As(%i32.builtin)> [concrete]
// CHECK:STDOUT: %.559: <witness> = impl_self_witness Core.IntLiteral, @As, @As(%i32.builtin) [concrete]
// CHECK:STDOUT: %As.impl_witness: <witness> = impl_witness @Core.IntLiteral.as.As.impl.%As.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.2c0: %As.type.dfb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %As.WithSelf.Convert.type.d9c: type = fn_type @As.WithSelf.Convert, @As.WithSelf(%i32.builtin, %Self.f80) [symbolic]
@@ -155,6 +157,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
// CHECK:STDOUT: %As.WithSelf.Convert.type.e08: type = fn_type @As.WithSelf.Convert, @As.WithSelf(%i32.builtin, %As.facet) [concrete]
// CHECK:STDOUT: %As.WithSelf.Convert.5a5: %As.WithSelf.Convert.type.e08 = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.9df: type = facet_type <@ImplicitAs, @ImplicitAs(%i32.builtin)> [concrete]
// CHECK:STDOUT: %.e10: <witness> = impl_self_witness Core.IntLiteral, @ImplicitAs, @ImplicitAs(%i32.builtin) [concrete]
// CHECK:STDOUT: %ImplicitAs.impl_witness.300: <witness> = impl_witness @Core.IntLiteral.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.19a: %ImplicitAs.type.9df = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.247: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32.builtin, %Self.bb1) [symbolic]
@@ -167,6 +170,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.20b: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32.builtin, %ImplicitAs.facet.18f) [concrete]
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.b9f: %ImplicitAs.WithSelf.Convert.type.20b = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete]
// CHECK:STDOUT: %.328: <witness> = impl_self_witness %i32.builtin, @ImplicitAs, @ImplicitAs(Core.IntLiteral) [concrete]
// CHECK:STDOUT: %ImplicitAs.impl_witness.9d7: <witness> = impl_witness @i32.builtin.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.c40: %ImplicitAs.type.7cb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.46f: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(Core.IntLiteral, %Self.bb1) [symbolic]
@@ -253,24 +257,28 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
// CHECK:STDOUT: %.loc20_21: type = type_literal constants.%i32.builtin [concrete = constants.%i32.builtin]
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(constants.%i32.builtin)> [concrete = constants.%AddWith.type.7c6]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc20: <witness> = impl_self_witness @i32.builtin.as.AddWith.impl.%.loc20_6, @AddWith, @AddWith(constants.%i32.builtin) [concrete = constants.%.417]
// CHECK:STDOUT: impl_decl @Core.IntLiteral.as.As.impl [concrete] {} {
// CHECK:STDOUT: %IntLiteral.ref: type = name_ref IntLiteral, file.%IntLiteral [concrete = Core.IntLiteral]
// CHECK:STDOUT: %As.ref: %As.type.116 = name_ref As, file.%As.decl [concrete = constants.%As.generic]
// CHECK:STDOUT: %.loc24: type = type_literal constants.%i32.builtin [concrete = constants.%i32.builtin]
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(constants.%i32.builtin)> [concrete = constants.%As.type.dfb]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc24: <witness> = impl_self_witness @Core.IntLiteral.as.As.impl.%IntLiteral.ref, @As, @As(constants.%i32.builtin) [concrete = constants.%.559]
// CHECK:STDOUT: impl_decl @Core.IntLiteral.as.ImplicitAs.impl [concrete] {} {
// CHECK:STDOUT: %IntLiteral.ref: type = name_ref IntLiteral, file.%IntLiteral [concrete = Core.IntLiteral]
// CHECK:STDOUT: %ImplicitAs.ref: %ImplicitAs.type.0ff = name_ref ImplicitAs, file.%ImplicitAs.decl [concrete = constants.%ImplicitAs.generic]
// CHECK:STDOUT: %.loc28: type = type_literal constants.%i32.builtin [concrete = constants.%i32.builtin]
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%i32.builtin)> [concrete = constants.%ImplicitAs.type.9df]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc28: <witness> = impl_self_witness @Core.IntLiteral.as.ImplicitAs.impl.%IntLiteral.ref, @ImplicitAs, @ImplicitAs(constants.%i32.builtin) [concrete = constants.%.e10]
// CHECK:STDOUT: impl_decl @i32.builtin.as.ImplicitAs.impl [concrete] {} {
// CHECK:STDOUT: %.loc32: type = type_literal constants.%i32.builtin [concrete = constants.%i32.builtin]
// CHECK:STDOUT: %ImplicitAs.ref: %ImplicitAs.type.0ff = name_ref ImplicitAs, file.%ImplicitAs.decl [concrete = constants.%ImplicitAs.generic]
// CHECK:STDOUT: %IntLiteral.ref: type = name_ref IntLiteral, file.%IntLiteral [concrete = Core.IntLiteral]
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete = constants.%ImplicitAs.type.7cb]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc32: <witness> = impl_self_witness @i32.builtin.as.ImplicitAs.impl.%.loc32, @ImplicitAs, @ImplicitAs(Core.IntLiteral) [concrete = constants.%.328]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @AddWith(%T.loc8_20.2: type) {
+5 -3
View File
@@ -45,13 +45,14 @@ var arr: array(i32, (1 as i32).(I.F)(2));
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.2a7: <witness> = impl_self_witness %i32, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @i32.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %self.param_patt.049: %pattern_type.6b6 = value_param_pattern [concrete]
// CHECK:STDOUT: %self.patt.f6c: %pattern_type.6b6 = at_binding_pattern self, %self.param_patt.049 [concrete]
// CHECK:STDOUT: %other.param_patt.12c: %pattern_type.6b6 = value_param_pattern [concrete]
// CHECK:STDOUT: %other.patt.656: %pattern_type.6b6 = at_binding_pattern other, %other.param_patt.12c [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %i32.as.I.impl.F.type: type = fn_type @i32.as.I.impl.F [concrete]
@@ -159,6 +160,7 @@ var arr: array(i32, (1 as i32).(I.F)(2));
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19: <witness> = impl_self_witness @i32.as.I.impl.%i32, @I [concrete = constants.%.2a7]
// CHECK:STDOUT: %arr.var: ref %array_type = var_storage %arr.var_patt [concrete]
// CHECK:STDOUT: %.loc23_40: type = splice_block %array_type [concrete = constants.%array_type] {
// CHECK:STDOUT: %i32.loc23_16: type = type_literal constants.%i32 [concrete = constants.%i32]
@@ -256,7 +258,7 @@ var arr: array(i32, (1 as i32).(I.F)(2));
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc20_34 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc20_34: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32.loc20_34 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32.loc20_34 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc20_14: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %self: %i32 = wrapper_binding self, %self.param
@@ -340,7 +342,7 @@ var arr: array(i32, (1 as i32).(I.F)(2));
// CHECK:STDOUT: %self.patt.loc16_8.2 => constants.%self.patt.f6c
// CHECK:STDOUT: %other.param_patt.loc16_19.2 => constants.%other.param_patt.12c
// CHECK:STDOUT: %other.patt.loc16_19.2 => constants.%other.patt.656
// CHECK:STDOUT: %.loc16_30.1 => constants.%.795
// CHECK:STDOUT: %.loc16_30.1 => constants.%.795f
// CHECK:STDOUT: %return.param_patt.loc16_30.2 => constants.%return.param_patt.a9a
// CHECK:STDOUT: %return.patt.loc16_27.2 => constants.%return.patt.e1b
// CHECK:STDOUT: }
+9 -9
View File
@@ -335,7 +335,7 @@ fn G() {
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %x.param_patt: %pattern_type.6b6 = ref_param_pattern [concrete]
// CHECK:STDOUT: %x.var_patt: %pattern_type.6b6 = var_pattern %x.param_patt [concrete]
@@ -374,9 +374,9 @@ fn G() {
// CHECK:STDOUT: %x.patt: %pattern_type.6b6 = at_binding_pattern x, %x.var_patt [concrete = constants.%x.patt]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %x.param: ref %i32 = ref_param call_param0
// CHECK:STDOUT: %.loc4_15.1: Core.Form = splice_block %.loc4_15.2 [concrete = constants.%.795] {
// CHECK:STDOUT: %.loc4_15.1: Core.Form = splice_block %.loc4_15.2 [concrete = constants.%.795f] {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc4_15.2: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc4_15.2: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %.loc4_15.3: type = type_component_of %.loc4_15.2 [concrete = constants.%i32]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x: ref %i32 = wrapper_binding x, %x.param
@@ -699,7 +699,7 @@ fn G() {
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.740: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet) [concrete]
// CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a4c7.1: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
@@ -719,7 +719,7 @@ fn G() {
// CHECK:STDOUT: %return.param_patt.a9a4c7.2: %pattern_type.6b6 = out_param_pattern [concrete = %return.param_patt.a9a4c7.1]
// CHECK:STDOUT: }
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a4c7.1, %i32 [concrete]
// CHECK:STDOUT: %F.specific_fn.8ea: <specific function> = specific_function %F, @F(%.795) [concrete]
// CHECK:STDOUT: %F.specific_fn.8ea: <specific function> = specific_function %F, @F(%.795f) [concrete]
// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete]
// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic]
// CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic]
@@ -870,9 +870,9 @@ fn G() {
// CHECK:STDOUT: %x.var: ref %i32 = var_storage %x.var_patt
// CHECK:STDOUT: %F.ref.loc13: %F.type = name_ref F, file.%F.decl [concrete = constants.%F]
// CHECK:STDOUT: %i32.loc13_34: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc13_30: Core.Form = init_form %i32.loc13_34 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc13_30: Core.Form = init_form %i32.loc13_34 [concrete = constants.%.795f]
// CHECK:STDOUT: %v.ref.loc13: ref %i32 = name_ref v, %v
// CHECK:STDOUT: %F.specific_fn.loc13: <specific function> = specific_function %F.ref.loc13, @F(constants.%.795) [concrete = constants.%F.specific_fn.8ea]
// CHECK:STDOUT: %F.specific_fn.loc13: <specific function> = specific_function %F.ref.loc13, @F(constants.%.795f) [concrete = constants.%F.specific_fn.8ea]
// CHECK:STDOUT: %.loc13_40: %i32 = acquire_value %v.ref.loc13
// CHECK:STDOUT: %impl.elem0.loc13: %.7a6 = impl_witness_access constants.%Copy.impl_witness.0e0, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6]
// CHECK:STDOUT: %bound_method.loc13_40.1: <bound method> = bound_method %.loc13_40, %impl.elem0.loc13
@@ -946,9 +946,9 @@ fn G() {
// CHECK:STDOUT: %.loc4_37.5 => constants.%.efc
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @F(constants.%.795) {
// CHECK:STDOUT: specific @F(constants.%.795f) {
// CHECK:STDOUT: %Fm.patt.loc4_16.2 => constants.%Fm.patt
// CHECK:STDOUT: %Fm.loc4_16.1 => constants.%.795
// CHECK:STDOUT: %Fm.loc4_16.1 => constants.%.795f
// CHECK:STDOUT: %.loc4_33.1 => constants.%i32
// CHECK:STDOUT: %.loc4_30.3 => constants.%inst.splice_block
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6
+2 -2
View File
@@ -32,7 +32,7 @@ fn Main() {
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.6b6 = value_param_pattern [concrete]
// CHECK:STDOUT: %a.patt: %pattern_type.6b6 = at_binding_pattern a, %a.param_patt [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %Echo.type: type = fn_type @Echo [concrete]
@@ -107,7 +107,7 @@ fn Main() {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_20 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc15_20: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15_20 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc15: Core.Form = init_form %i32.loc15_20 [concrete = constants.%.795f]
// CHECK:STDOUT: %a.param: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc15_12: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %a: %i32 = wrapper_binding a, %a.param
@@ -43,7 +43,7 @@ fn Class(F: type).Inner.G() -> i32 { return F(); }
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -111,7 +111,7 @@ fn Class(F: type).Inner.G() -> i32 { return F(); }
// CHECK:STDOUT: }
// CHECK:STDOUT: %F.loc13_11: type = symbolic_binding F, 0 [symbolic = @Class.%F.loc5_14.1 (constants.%F)]
// CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc13_32: Core.Form = init_form %i32.loc13 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc13_32: Core.Form = init_form %i32.loc13 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param.loc13: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return.loc13: ref %i32 = return_slot %return.param.loc13
// CHECK:STDOUT: }
@@ -149,7 +149,7 @@ fn Class(F: type).Inner.G() -> i32 { return F(); }
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc8_15: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc8_15: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -158,7 +158,7 @@ fn Class(F: type).Inner.G() -> i32 { return F(); }
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc9: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc9: Core.Form = init_form %i32.loc9 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc9: Core.Form = init_form %i32.loc9 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param.loc9: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return.loc9: ref %i32 = return_slot %return.param.loc9
// CHECK:STDOUT: }
@@ -676,7 +676,7 @@ import library "extern_api";
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %B.type: type = fn_type @B [concrete]
// CHECK:STDOUT: %B: %B.type = struct_value () [concrete]
// CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete]
@@ -761,7 +761,7 @@ import library "extern_api";
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {}
// CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] {} {
// CHECK:STDOUT: %i32.loc23_24: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc23: Core.Form = init_form %i32.loc23_24 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc23: Core.Form = init_form %i32.loc23_24 [concrete = constants.%.795f]
// CHECK:STDOUT: %b.param: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc23_16: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %b: %i32 = wrapper_binding b, %b.param
@@ -896,7 +896,7 @@ import library "extern_api";
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %C.type: type = fn_type @C [concrete]
// CHECK:STDOUT: %C: %C.type = struct_value () [concrete]
// CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete]
@@ -979,7 +979,7 @@ import library "extern_api";
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {}
// CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] {} {
// CHECK:STDOUT: %i32.loc7_24: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc7: Core.Form = init_form %i32.loc7_24 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc7: Core.Form = init_form %i32.loc7_24 [concrete = constants.%.795f]
// CHECK:STDOUT: %b.param: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc7_16: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %b: %i32 = wrapper_binding b, %b.param
@@ -60,6 +60,7 @@ fn G() {
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %ImplsGeneric: type = class_type @ImplsGeneric [concrete]
// CHECK:STDOUT: %Generic.type.b40: type = facet_type <@Generic, @Generic(%GenericParam)> [concrete]
// CHECK:STDOUT: %.e53: <witness> = impl_self_witness %ImplsGeneric, @Generic, @Generic(%GenericParam) [concrete]
// CHECK:STDOUT: %Generic.impl_witness: <witness> = impl_witness @ImplsGeneric.as.Generic.impl.%Generic.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.685: %Generic.type.b40 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Generic.WithSelf.F.type.e39: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%GenericParam, %Self.8ea1ea.1) [symbolic]
@@ -77,6 +78,7 @@ fn G() {
// CHECK:STDOUT: %Other.WithSelf.G.050: %Other.WithSelf.G.type.eee = struct_value () [symbolic]
// CHECK:STDOUT: %Other.assoc_type: type = assoc_entity_type @Other [concrete]
// CHECK:STDOUT: %assoc0.e70: %Other.assoc_type = assoc_entity element0, @Other.WithSelf.%Other.WithSelf.G.decl [concrete]
// CHECK:STDOUT: %.13c: <witness> = impl_self_witness %ImplsGeneric, @Other [concrete]
// CHECK:STDOUT: %Other.impl_witness: <witness> = impl_witness @ImplsGeneric.as.Other.impl.%Other.impl_witness_table [concrete]
// CHECK:STDOUT: %ImplsGeneric.as.Other.impl.G.type: type = fn_type @ImplsGeneric.as.Other.impl.G [concrete]
// CHECK:STDOUT: %ImplsGeneric.as.Other.impl.G: %ImplsGeneric.as.Other.impl.G.type = struct_value () [concrete]
@@ -148,11 +150,13 @@ fn G() {
// CHECK:STDOUT: %GenericParam.ref: type = name_ref GenericParam, file.%GenericParam.decl [concrete = constants.%GenericParam]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%GenericParam)> [concrete = constants.%Generic.type.b40]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22: <witness> = impl_self_witness @ImplsGeneric.as.Generic.impl.%ImplsGeneric.ref, @Generic, @Generic(constants.%GenericParam) [concrete = constants.%.e53]
// CHECK:STDOUT: %Other.decl: type = interface_decl @Other [concrete = constants.%Other.type] {} {}
// CHECK:STDOUT: impl_decl @ImplsGeneric.as.Other.impl [concrete] {} {
// CHECK:STDOUT: %ImplsGeneric.ref: type = name_ref ImplsGeneric, file.%ImplsGeneric.decl [concrete = constants.%ImplsGeneric]
// CHECK:STDOUT: %Other.ref: type = name_ref Other, file.%Other.decl [concrete = constants.%Other.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc29: <witness> = impl_self_witness @ImplsGeneric.as.Other.impl.%ImplsGeneric.ref, @Other [concrete = constants.%.13c]
// CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] {
// CHECK:STDOUT: %T.patt.loc33_31.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_31.2 (constants.%T.patt)]
// CHECK:STDOUT: %U.patt.loc33_48.1: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc33_48.2 (constants.%U.patt.8a6)]
+14
View File
@@ -1853,6 +1853,7 @@ fn F() {
// CHECK:STDOUT: %EE: type = class_type @EE [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.236: <witness> = impl_self_witness %EE, @Z [concrete]
// CHECK:STDOUT: %Z.impl_witness.0e0: <witness> = impl_witness @EE.as.Z.impl.%Z.impl_witness_table [concrete]
// CHECK:STDOUT: %Z.facet.a2d: %Z.type = facet_value %EE, (%Z.impl_witness.0e0) [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
@@ -1863,6 +1864,7 @@ fn F() {
// CHECK:STDOUT: %DD.type: type = generic_class_type @DD [concrete]
// CHECK:STDOUT: %DD.generic: %DD.type = struct_value () [concrete]
// CHECK:STDOUT: %DD.699: type = class_type @DD, @DD(%E) [symbolic]
// CHECK:STDOUT: %.91f: <witness> = impl_self_witness %DD.699, @Z [symbolic]
// CHECK:STDOUT: %Z.impl_witness.7fb: <witness> = impl_witness @DD.as.Z.impl.%Z.impl_witness_table, @DD.as.Z.impl(%E) [symbolic]
// CHECK:STDOUT: %Z.facet.419: %Z.type = facet_value %DD.699, (%Z.impl_witness.7fb) [symbolic]
// CHECK:STDOUT: %pattern_type.5d7: type = pattern_type %Z.type [concrete]
@@ -1875,15 +1877,18 @@ fn F() {
// CHECK:STDOUT: %.8d3: require_specific_def_type = require_specific_def @DD.as.Z.impl(%E) [symbolic]
// CHECK:STDOUT: %Z.facet.0b6: %Z.type = facet_value %DD.699, (%Z.lookup_impl_witness) [symbolic]
// CHECK:STDOUT: %CC.2a8: type = class_type @CC, @CC(%Z.facet.0b6) [symbolic]
// CHECK:STDOUT: %.e93: <witness> = impl_self_witness %CC.2a8, @Z [symbolic]
// CHECK:STDOUT: %Z.impl_witness.458: <witness> = impl_witness @CC.as.Z.impl.%Z.impl_witness_table, @CC.as.Z.impl(%E) [symbolic]
// CHECK:STDOUT: %Z.facet.2d1: %Z.type = facet_value %CC.2a8, (%Z.impl_witness.458) [symbolic]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
// CHECK:STDOUT: %DD.cfc: type = class_type @DD, @DD(%EE) [concrete]
// CHECK:STDOUT: %.890: <witness> = impl_self_witness %DD.cfc, @Z [concrete]
// CHECK:STDOUT: %Z.impl_witness.7dd: <witness> = impl_witness @DD.as.Z.impl.%Z.impl_witness_table, @DD.as.Z.impl(%EE) [concrete]
// CHECK:STDOUT: %.061: require_specific_def_type = require_specific_def @DD.as.Z.impl(%EE) [concrete]
// CHECK:STDOUT: %Z.facet.da0: %Z.type = facet_value %DD.cfc, (%Z.impl_witness.7dd) [concrete]
// CHECK:STDOUT: %CC.a5a: type = class_type @CC, @CC(%Z.facet.da0) [concrete]
// CHECK:STDOUT: %.371: <witness> = impl_self_witness %CC.a5a, @Z [concrete]
// CHECK:STDOUT: %Z.impl_witness.df9: <witness> = impl_witness @CC.as.Z.impl.%Z.impl_witness_table, @CC.as.Z.impl(%EE) [concrete]
// CHECK:STDOUT: %Z.facet.57d: %Z.type = facet_value %CC.a5a, (%Z.impl_witness.df9) [concrete]
// CHECK:STDOUT: }
@@ -1911,6 +1916,7 @@ fn F() {
// CHECK:STDOUT: %EE.ref: type = name_ref EE, file.%EE.decl [concrete = constants.%EE]
// CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc6: <witness> = impl_self_witness @EE.as.Z.impl.%EE.ref, @Z [concrete = constants.%.236]
// CHECK:STDOUT: %DD.decl: %DD.type = class_decl @DD [concrete = constants.%DD.generic] {
// CHECK:STDOUT: %E.patt.loc8_11.1: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc8_11.2 (constants.%E.patt)]
// CHECK:STDOUT: } {
@@ -1933,6 +1939,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %E.loc9_15.1: type = symbolic_binding E, 0 [symbolic = %E.loc9_15.2 (constants.%E)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @DD.as.Z.impl.%DD.loc9_27.1, @Z [symbolic = @DD.as.Z.impl.%.loc9_34 (constants.%.91f)]
// CHECK:STDOUT: %CC.decl: %CC.type = class_decl @CC [concrete = constants.%CC.generic] {
// CHECK:STDOUT: %D.patt.loc11_11.1: %pattern_type.5d7 = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc11_11.2 (constants.%D.patt)]
// CHECK:STDOUT: } {
@@ -1959,6 +1966,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %E.loc12_15.1: type = symbolic_binding E, 0 [symbolic = %E.loc12_15.2 (constants.%E)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @CC.as.Z.impl.%CC.loc12_31.1, @Z [symbolic = @CC.as.Z.impl.%.loc12_38 (constants.%.e93)]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -1986,6 +1994,7 @@ fn F() {
// CHECK:STDOUT: %E.patt.loc9_15.2: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc9_15.2 (constants.%E.patt)]
// CHECK:STDOUT: %E.loc9_15.2: type = symbolic_binding E, 0 [symbolic = %E.loc9_15.2 (constants.%E)]
// CHECK:STDOUT: %DD.loc9_27.2: type = class_type @DD, @DD(%E.loc9_15.2) [symbolic = %DD.loc9_27.2 (constants.%DD.699)]
// CHECK:STDOUT: %.loc9_34: <witness> = impl_self_witness %DD.loc9_27.2, @Z [symbolic = %.loc9_34 (constants.%.91f)]
// CHECK:STDOUT: %Z.impl_witness.loc9_34.2: <witness> = impl_witness %Z.impl_witness_table, @DD.as.Z.impl(%E.loc9_15.2) [symbolic = %Z.impl_witness.loc9_34.2 (constants.%Z.impl_witness.7fb)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -2008,6 +2017,7 @@ fn F() {
// CHECK:STDOUT: %Z.lookup_impl_witness: <witness> = lookup_impl_witness %DD.loc12_30.2, @Z [symbolic = %Z.lookup_impl_witness (constants.%Z.lookup_impl_witness)]
// CHECK:STDOUT: %Z.facet.loc12_31.2: %Z.type = facet_value %DD.loc12_30.2, (%Z.lookup_impl_witness) [symbolic = %Z.facet.loc12_31.2 (constants.%Z.facet.0b6)]
// CHECK:STDOUT: %CC.loc12_31.2: type = class_type @CC, @CC(%Z.facet.loc12_31.2) [symbolic = %CC.loc12_31.2 (constants.%CC.2a8)]
// CHECK:STDOUT: %.loc12_38: <witness> = impl_self_witness %CC.loc12_31.2, @Z [symbolic = %.loc12_38 (constants.%.e93)]
// CHECK:STDOUT: %Z.impl_witness.loc12_38.2: <witness> = impl_witness %Z.impl_witness_table, @CC.as.Z.impl(%E.loc12_15.2) [symbolic = %Z.impl_witness.loc12_38.2 (constants.%Z.impl_witness.458)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -2092,6 +2102,7 @@ fn F() {
// CHECK:STDOUT: %E.patt.loc9_15.2 => constants.%E.patt
// CHECK:STDOUT: %E.loc9_15.2 => constants.%E
// CHECK:STDOUT: %DD.loc9_27.2 => constants.%DD.699
// CHECK:STDOUT: %.loc9_34 => constants.%.91f
// CHECK:STDOUT: %Z.impl_witness.loc9_34.2 => constants.%Z.impl_witness.7fb
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -2119,6 +2130,7 @@ fn F() {
// CHECK:STDOUT: %Z.lookup_impl_witness => constants.%Z.lookup_impl_witness
// CHECK:STDOUT: %Z.facet.loc12_31.2 => constants.%Z.facet.0b6
// CHECK:STDOUT: %CC.loc12_31.2 => constants.%CC.2a8
// CHECK:STDOUT: %.loc12_38 => constants.%.e93
// CHECK:STDOUT: %Z.impl_witness.loc12_38.2 => constants.%Z.impl_witness.458
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2135,6 +2147,7 @@ fn F() {
// CHECK:STDOUT: %E.patt.loc9_15.2 => constants.%E.patt
// CHECK:STDOUT: %E.loc9_15.2 => constants.%EE
// CHECK:STDOUT: %DD.loc9_27.2 => constants.%DD.cfc
// CHECK:STDOUT: %.loc9_34 => constants.%.890
// CHECK:STDOUT: %Z.impl_witness.loc9_34.2 => constants.%Z.impl_witness.7dd
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -2153,6 +2166,7 @@ fn F() {
// CHECK:STDOUT: %Z.lookup_impl_witness => constants.%Z.impl_witness.7dd
// CHECK:STDOUT: %Z.facet.loc12_31.2 => constants.%Z.facet.da0
// CHECK:STDOUT: %CC.loc12_31.2 => constants.%CC.a5a
// CHECK:STDOUT: %.loc12_38 => constants.%.371
// CHECK:STDOUT: %Z.impl_witness.loc12_38.2 => constants.%Z.impl_witness.df9
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -47,8 +47,10 @@ fn F() {
// CHECK:STDOUT: %DD: type = class_type @DD [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.565: <witness> = impl_self_witness %DD, @Y [concrete]
// CHECK:STDOUT: %Y.impl_witness: <witness> = impl_witness @DD.as.Y.impl.%Y.impl_witness_table [concrete]
// CHECK:STDOUT: %Y.facet.2a4: %Y.type = facet_value %DD, (%Y.impl_witness) [concrete]
// CHECK:STDOUT: %.918: <witness> = impl_self_witness %DD, @W [concrete]
// CHECK:STDOUT: %W.impl_witness: <witness> = impl_witness @DD.as.W.impl.%W.impl_witness_table [concrete]
// CHECK:STDOUT: %W.facet: %W.type = facet_value %DD, (%W.impl_witness) [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
@@ -79,12 +81,14 @@ fn F() {
// CHECK:STDOUT: %Y.lookup_impl_witness: <witness> = lookup_impl_witness %E, @Y [symbolic]
// CHECK:STDOUT: %Y.facet.18f: %Y.type = facet_value %E.as_type, (%Y.lookup_impl_witness) [symbolic]
// CHECK:STDOUT: %CC.db5: type = class_type @CC, @CC(%Y.facet.18f) [symbolic]
// CHECK:STDOUT: %.bd6: <witness> = impl_self_witness %CC.db5, @Z [symbolic]
// CHECK:STDOUT: %Z.impl_witness.6a9: <witness> = impl_witness @CC.as.Z.impl.%Z.impl_witness_table, @CC.as.Z.impl(%E) [symbolic]
// CHECK:STDOUT: %Z.facet.674: %Z.type = facet_value %CC.db5, (%Z.impl_witness.6a9) [symbolic]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
// CHECK:STDOUT: %CC.d62: type = class_type @CC, @CC(%Y.facet.2a4) [concrete]
// CHECK:STDOUT: %facet_value: %facet_type = facet_value %DD, (%Y.impl_witness, %W.impl_witness) [concrete]
// CHECK:STDOUT: %.343: <witness> = impl_self_witness %CC.d62, @Z [concrete]
// CHECK:STDOUT: %Z.impl_witness.b3a: <witness> = impl_witness @CC.as.Z.impl.%Z.impl_witness_table, @CC.as.Z.impl(%facet_value) [concrete]
// CHECK:STDOUT: %Z.facet.737: %Z.type = facet_value %CC.d62, (%Z.impl_witness.b3a) [concrete]
// CHECK:STDOUT: }
@@ -118,10 +122,12 @@ fn F() {
// CHECK:STDOUT: %DD.ref: type = name_ref DD, file.%DD.decl [concrete = constants.%DD]
// CHECK:STDOUT: %Y.ref: type = name_ref Y, file.%Y.decl [concrete = constants.%Y.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @DD.as.Y.impl.%DD.ref, @Y [concrete = constants.%.565]
// CHECK:STDOUT: impl_decl @DD.as.W.impl [concrete] {} {
// CHECK:STDOUT: %DD.ref: type = name_ref DD, file.%DD.decl [concrete = constants.%DD]
// CHECK:STDOUT: %W.ref: type = name_ref W, file.%W.decl [concrete = constants.%W.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @DD.as.W.impl.%DD.ref, @W [concrete = constants.%.918]
// CHECK:STDOUT: %CC.decl: %CC.type = class_decl @CC [concrete = constants.%CC.generic] {
// CHECK:STDOUT: %D.patt.loc12_11.1: %pattern_type.cfb = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc12_11.2 (constants.%D.patt)]
// CHECK:STDOUT: } {
@@ -154,6 +160,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %E.loc19_15.1: %facet_type = symbolic_binding E, 0 [symbolic = %E.loc19_15.2 (constants.%E)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19: <witness> = impl_self_witness @CC.as.Z.impl.%CC.loc19_28.1, @Z [symbolic = @CC.as.Z.impl.%.loc19_35 (constants.%.bd6)]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -215,6 +222,7 @@ fn F() {
// CHECK:STDOUT: %Y.lookup_impl_witness: <witness> = lookup_impl_witness %E.loc19_15.2, @Y [symbolic = %Y.lookup_impl_witness (constants.%Y.lookup_impl_witness)]
// CHECK:STDOUT: %Y.facet.loc19_28.2: %Y.type = facet_value %E.as_type.loc19_28.2, (%Y.lookup_impl_witness) [symbolic = %Y.facet.loc19_28.2 (constants.%Y.facet.18f)]
// CHECK:STDOUT: %CC.loc19_28.2: type = class_type @CC, @CC(%Y.facet.loc19_28.2) [symbolic = %CC.loc19_28.2 (constants.%CC.db5)]
// CHECK:STDOUT: %.loc19_35: <witness> = impl_self_witness %CC.loc19_28.2, @Z [symbolic = %.loc19_35 (constants.%.bd6)]
// CHECK:STDOUT: %Z.impl_witness.loc19_35.2: <witness> = impl_witness %Z.impl_witness_table, @CC.as.Z.impl(%E.loc19_15.2) [symbolic = %Z.impl_witness.loc19_35.2 (constants.%Z.impl_witness.6a9)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -302,6 +310,7 @@ fn F() {
// CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.lookup_impl_witness
// CHECK:STDOUT: %Y.facet.loc19_28.2 => constants.%Y.facet.18f
// CHECK:STDOUT: %CC.loc19_28.2 => constants.%CC.db5
// CHECK:STDOUT: %.loc19_35 => constants.%.bd6
// CHECK:STDOUT: %Z.impl_witness.loc19_35.2 => constants.%Z.impl_witness.6a9
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -321,6 +330,7 @@ fn F() {
// CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.impl_witness
// CHECK:STDOUT: %Y.facet.loc19_28.2 => constants.%Y.facet.2a4
// CHECK:STDOUT: %CC.loc19_28.2 => constants.%CC.d62
// CHECK:STDOUT: %.loc19_35 => constants.%.343
// CHECK:STDOUT: %Z.impl_witness.loc19_35.2 => constants.%Z.impl_witness.b3a
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
+2 -2
View File
@@ -88,7 +88,7 @@ var n: i32 = Outer(i32).Inner(42).Get();
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.740: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet) [concrete]
// CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %bound_method.098: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
@@ -288,7 +288,7 @@ var n: i32 = Outer(i32).Inner(42).Get();
// CHECK:STDOUT: specific @Inner.Get(constants.%Copy.facet.987, constants.%int_42.ac4) {
// CHECK:STDOUT: %T => constants.%Copy.facet.987
// CHECK:STDOUT: %T.as_type.loc7_17.1 => constants.%i32
// CHECK:STDOUT: %.loc7_17.2 => constants.%.795
// CHECK:STDOUT: %.loc7_17.2 => constants.%.795f
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6
// CHECK:STDOUT: %return.param_patt.loc7_17.2 => constants.%return.param_patt.a9a
// CHECK:STDOUT: %return.patt.loc7_14.2 => constants.%return.patt.e1b
@@ -350,6 +350,7 @@ fn H(generic T: type) {
// CHECK:STDOUT: %BB.as_type: type = facet_access_type %BB.6ca [symbolic]
// CHECK:STDOUT: %ptr.e8f8f9.1: type = ptr_type %AA [symbolic]
// CHECK:STDOUT: %B.type.4a0be4.1: type = facet_type <@B, @B(%ptr.e8f8f9.1)> [symbolic]
// CHECK:STDOUT: %.a32: <witness> = impl_self_witness %BB.as_type, @B, @B(%ptr.e8f8f9.1) [symbolic]
// CHECK:STDOUT: %B.impl_witness.8cc: <witness> = impl_witness @BB.as_type.as.B.impl.%B.impl_witness_table, @BB.as_type.as.B.impl(%AA, %BB.6ca) [symbolic]
// CHECK:STDOUT: %require_complete.a5dc9d.1: <witness> = require_complete_type %B.type.4a0be4.1 [symbolic]
// CHECK:STDOUT: %DD.patt: %pattern_type.98f = symbolic_binding_pattern DD, 0 [symbolic]
@@ -417,6 +418,7 @@ fn H(generic T: type) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %BB.loc9_26.1: @BB.as_type.as.B.impl.%A_where.type (%A_where.type.ce6fa0.1) = symbolic_binding BB, 1 [symbolic = %BB.loc9_26.2 (constants.%BB.6ca)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @BB.as_type.as.B.impl.%.loc9_49, @B, @B(constants.%ptr.e8f8f9.1) [symbolic = @BB.as_type.as.B.impl.%.loc9_62 (constants.%.a32)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic impl @BB.as_type.as.B.impl(%AA.loc9_16.1: type, %BB.loc9_26.1: @BB.as_type.as.B.impl.%A_where.type (%A_where.type.ce6fa0.1)) {
@@ -440,6 +442,7 @@ fn H(generic T: type) {
// CHECK:STDOUT: %BB.as_type.loc9_49.2: type = facet_access_type %BB.loc9_26.2 [symbolic = %BB.as_type.loc9_49.2 (constants.%BB.as_type)]
// CHECK:STDOUT: %ptr.loc9_59.2: type = ptr_type %AA.loc9_16.2 [symbolic = %ptr.loc9_59.2 (constants.%ptr.e8f8f9.1)]
// CHECK:STDOUT: %B.type.loc9_60.2: type = facet_type <@B, @B(%ptr.loc9_59.2)> [symbolic = %B.type.loc9_60.2 (constants.%B.type.4a0be4.1)]
// CHECK:STDOUT: %.loc9_62: <witness> = impl_self_witness %BB.as_type.loc9_49.2, @B, @B(%ptr.loc9_59.2) [symbolic = %.loc9_62 (constants.%.a32)]
// CHECK:STDOUT: %B.impl_witness.loc9_62.2: <witness> = impl_witness %B.impl_witness_table, @BB.as_type.as.B.impl(%AA.loc9_16.2, %BB.loc9_26.2) [symbolic = %B.impl_witness.loc9_62.2 (constants.%B.impl_witness.8cc)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -518,6 +521,7 @@ fn H(generic T: type) {
// CHECK:STDOUT: %BB.as_type.loc9_49.2 => constants.%BB.as_type
// CHECK:STDOUT: %ptr.loc9_59.2 => constants.%ptr.e8f8f9.1
// CHECK:STDOUT: %B.type.loc9_60.2 => constants.%B.type.4a0be4.1
// CHECK:STDOUT: %.loc9_62 => constants.%.a32
// CHECK:STDOUT: %B.impl_witness.loc9_62.2 => constants.%B.impl_witness.8cc
// CHECK:STDOUT: }
// CHECK:STDOUT:
+10 -8
View File
@@ -78,7 +78,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -110,6 +110,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete]
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete]
// CHECK:STDOUT: %.bc7: <witness> = impl_self_witness %C, @ImplicitAs, @ImplicitAs(%i32) [concrete]
// CHECK:STDOUT: %ImplicitAs.impl_witness.496: <witness> = impl_witness @C.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete]
// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete]
@@ -180,7 +181,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc4_33: Core.Form = init_form %i32.loc4 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc4_33: Core.Form = init_form %i32.loc4 [concrete = constants.%.795f]
// CHECK:STDOUT: %.loc4_18.1: type = splice_block %.loc4_18.2 [concrete = type] {
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
// CHECK:STDOUT: %.loc4_18.2: type = type_literal type [concrete = type]
@@ -199,7 +200,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc9_21 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc9_21: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc9: Core.Form = init_form %i32.loc9_21 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc9: Core.Form = init_form %i32.loc9_21 [concrete = constants.%.795f]
// CHECK:STDOUT: %n.param: %i32 = value_param call_param0
// CHECK:STDOUT: %i32.loc9_13: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %n: %i32 = wrapper_binding n, %n.param
@@ -214,7 +215,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc20: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %c.param: %C = value_param call_param0
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %c: %C = wrapper_binding c, %c.param
@@ -231,7 +232,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16_25: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc16_25: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %self.param: %C = value_param call_param0
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %self: %C = wrapper_binding self, %self.param
@@ -256,6 +257,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%i32)> [concrete = constants.%ImplicitAs.type.914]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15: <witness> = impl_self_witness @C.as.ImplicitAs.impl.%Self.ref, @ImplicitAs, @ImplicitAs(constants.%i32) [concrete = constants.%.bc7]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%struct_type.n [concrete = constants.%complete_type.cdf]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -378,7 +380,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -450,7 +452,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc4_33: Core.Form = init_form %i32.loc4 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc4_33: Core.Form = init_form %i32.loc4 [concrete = constants.%.795f]
// CHECK:STDOUT: %.loc4_18.1: type = splice_block %.loc4_18.2 [concrete = type] {
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
// CHECK:STDOUT: %.loc4_18.2: type = type_literal type [concrete = type]
@@ -470,7 +472,7 @@ fn Test(d: D) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc11: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc11: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %d.param: %D = value_param call_param0
// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D]
// CHECK:STDOUT: %d: %D = wrapper_binding d, %d.param
@@ -532,7 +532,7 @@ fn Test(e: E) {
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -615,7 +615,7 @@ fn Test(e: E) {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc4 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc4: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc4_33: Core.Form = init_form %i32.loc4 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc4_33: Core.Form = init_form %i32.loc4 [concrete = constants.%.795f]
// CHECK:STDOUT: %.loc4_18.1: type = splice_block %.loc4_18.2 [concrete = type] {
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
// CHECK:STDOUT: %.loc4_18.2: type = type_literal type [concrete = type]
+2 -2
View File
@@ -34,7 +34,7 @@ fn F(b: bool, n: i32, m: i32) -> i32 {
// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete]
// CHECK:STDOUT: %m.param_patt: %pattern_type.6b6 = value_param_pattern [concrete]
// CHECK:STDOUT: %m.patt: %pattern_type.6b6 = at_binding_pattern m, %m.param_patt [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
@@ -118,7 +118,7 @@ fn F(b: bool, n: i32, m: i32) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc15_34 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc15_34: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc15_34: Core.Form = init_form %i32.loc15_34 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc15_34: Core.Form = init_form %i32.loc15_34 [concrete = constants.%.795f]
// CHECK:STDOUT: %b.param: bool = value_param call_param0
// CHECK:STDOUT: %.loc15_9: type = type_literal bool [concrete = bool]
// CHECK:STDOUT: %b: bool = wrapper_binding b, %b.param
+7 -7
View File
@@ -44,7 +44,7 @@ fn PartiallyConstant(t: type) -> i32 {
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -157,7 +157,7 @@ fn PartiallyConstant(t: type) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc15_11: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc15_11: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -166,7 +166,7 @@ fn PartiallyConstant(t: type) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16_11: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc16_11: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -175,7 +175,7 @@ fn PartiallyConstant(t: type) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc18: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc18: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -184,7 +184,7 @@ fn PartiallyConstant(t: type) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc22: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc22: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -193,7 +193,7 @@ fn PartiallyConstant(t: type) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc26 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc26: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc26: Core.Form = init_form %i32.loc26 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc26: Core.Form = init_form %i32.loc26 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -204,7 +204,7 @@ fn PartiallyConstant(t: type) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32.loc32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc32_34: Core.Form = init_form %i32.loc32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc32_34: Core.Form = init_form %i32.loc32 [concrete = constants.%.795f]
// CHECK:STDOUT: %t.param: type = value_param call_param0
// CHECK:STDOUT: %.loc32_25: type = type_literal type [concrete = type]
// CHECK:STDOUT: %t: type = wrapper_binding t, %t.param
+4 -4
View File
@@ -27,7 +27,7 @@ fn F(b: bool) -> i32 {
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -105,7 +105,7 @@ fn F(b: bool) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc15_11: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc15_11: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -114,7 +114,7 @@ fn F(b: bool) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16_11: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc16_11: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -125,7 +125,7 @@ fn F(b: bool) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc18_18: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc18_18: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %b.param: bool = value_param call_param0
// CHECK:STDOUT: %.loc18_9: type = type_literal bool [concrete = bool]
// CHECK:STDOUT: %b: bool = wrapper_binding b, %b.param
+2 -2
View File
@@ -31,7 +31,7 @@ fn F(a: bool, b: bool, c: bool) -> i32 {
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.795: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %.795f: Core.Form = init_form %i32 [concrete]
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %return.param_patt.a9a: %pattern_type.6b6 = out_param_pattern [concrete]
// CHECK:STDOUT: %return.patt.e1b: %pattern_type.6b6 = return_slot_pattern %return.param_patt.a9a, %i32 [concrete]
@@ -114,7 +114,7 @@ fn F(a: bool, b: bool, c: bool) -> i32 {
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32 [concrete = constants.%return.patt.e1b]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %.loc15_36: Core.Form = init_form %i32 [concrete = constants.%.795]
// CHECK:STDOUT: %.loc15_36: Core.Form = init_form %i32 [concrete = constants.%.795f]
// CHECK:STDOUT: %a.param: bool = value_param call_param0
// CHECK:STDOUT: %.loc15_9: type = type_literal bool [concrete = bool]
// CHECK:STDOUT: %a: bool = wrapper_binding a, %a.param
+10
View File
@@ -120,6 +120,7 @@ fn CallF() {
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.ca3: %.Self.as_type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.b84: type = facet_type <@I where %impl.elem0.ca3 = %empty_struct> [concrete]
// CHECK:STDOUT: %.aaf: <witness> = impl_self_witness %empty_struct_type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.55a: <witness> = impl_witness @empty_struct_type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %empty_struct.type.facet: %type = facet_value %empty_struct_type, () [concrete]
@@ -130,6 +131,7 @@ fn CallF() {
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete]
// CHECK:STDOUT: %I_where.type.8e4: type = facet_type <@I where %impl.elem0.ca3 = %int_0.5c6> [concrete]
// CHECK:STDOUT: %.2a7: <witness> = impl_self_witness %i32, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.ce4: <witness> = impl_witness @i32.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %Int.type.facet: %type = facet_value %i32, () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete]
@@ -193,6 +195,7 @@ fn CallF() {
// CHECK:STDOUT: %rewrite.loc8_23.2 = requirement_rewrite %impl.elem0.loc8_20.2, %.loc8_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc8_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: impl_decl @i32.as.I.impl [concrete] {} {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
@@ -212,6 +215,7 @@ fn CallF() {
// CHECK:STDOUT: %rewrite.loc10_24.2 = requirement_rewrite %impl.elem0.loc10_21.2, %int_0 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @i32.as.I.impl.%i32, @I [concrete = constants.%.2a7]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -314,6 +318,7 @@ fn CallF() {
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.ca3: %.Self.as_type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0.ca3 = %int_0> [concrete]
// CHECK:STDOUT: %.aaf: <witness> = impl_self_witness %empty_struct_type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @empty_struct_type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %empty_struct.type.facet: %type = facet_value %empty_struct_type, () [concrete]
@@ -358,6 +363,7 @@ fn CallF() {
// CHECK:STDOUT: %rewrite.loc15_23.2 = requirement_rewrite %impl.elem0.loc15_20.2, %int_0 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc15_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -428,6 +434,7 @@ fn CallF() {
// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete]
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.dee: type = facet_type <@ImplicitAs, @ImplicitAs(%C)> [concrete]
// CHECK:STDOUT: %.5c5: <witness> = impl_self_witness %empty_tuple.type, @ImplicitAs, @ImplicitAs(%C) [concrete]
// CHECK:STDOUT: %ImplicitAs.impl_witness: <witness> = impl_witness @empty_tuple.type.as.ImplicitAs.impl.%ImplicitAs.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete]
// CHECK:STDOUT: %self.param_patt.154: %pattern_type.cb1 = value_param_pattern [concrete]
@@ -451,6 +458,7 @@ fn CallF() {
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.ca3: %.Self.as_type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0.ca3 = %empty_tuple> [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %C.type.facet: %type = facet_value %C, () [concrete]
@@ -485,6 +493,7 @@ fn CallF() {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(constants.%C)> [concrete = constants.%ImplicitAs.type.dee]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @empty_tuple.type.as.ImplicitAs.impl.%.loc10_7.2, @ImplicitAs, @ImplicitAs(constants.%C) [concrete = constants.%.5c5]
// CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
@@ -506,6 +515,7 @@ fn CallF() {
// CHECK:STDOUT: %rewrite.loc18_22.2 = requirement_rewrite %impl.elem0.loc18_19.2, %.loc18_25.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @C.as.I.impl.%C.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
+2
View File
@@ -115,6 +115,7 @@ final impl C(invalid) as I {}
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Simple.type: type = facet_type <@Simple> [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.dd3: <witness> = impl_self_witness %C, @Simple [concrete]
// CHECK:STDOUT: %Simple.impl_witness: <witness> = impl_witness @C.as.Simple.impl.%Simple.impl_witness_table [concrete]
// CHECK:STDOUT: %C.as.Simple.impl.F.type: type = fn_type @C.as.Simple.impl.F [concrete]
// CHECK:STDOUT: %C.as.Simple.impl.F: %C.as.Simple.impl.F.type = struct_value () [concrete]
@@ -125,6 +126,7 @@ final impl C(invalid) as I {}
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %Simple.ref: type = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @C.as.Simple.impl.%C.ref, @Simple [concrete = constants.%.dd3]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: impl @C.as.Simple.impl: %C.ref as %Simple.ref {
+10
View File
@@ -256,6 +256,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %assoc0: %NonInstance1.assoc_type = assoc_entity element0, @NonInstance1.WithSelf.%NonInstance1.WithSelf.F1.decl [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %empty_tuple.type} [concrete]
// CHECK:STDOUT: %.dad: <witness> = impl_self_witness %struct_type.a, @NonInstance1 [concrete]
// CHECK:STDOUT: %NonInstance1.impl_witness: <witness> = impl_witness @struct_type.a.as.NonInstance1.impl.%NonInstance1.impl_witness_table [concrete]
// CHECK:STDOUT: %struct_type.a.as.NonInstance1.impl.F1.type: type = fn_type @struct_type.a.as.NonInstance1.impl.F1 [concrete]
// CHECK:STDOUT: %struct_type.a.as.NonInstance1.impl.F1: %struct_type.a.as.NonInstance1.impl.F1.type = struct_value () [concrete]
@@ -279,6 +280,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %empty_tuple.type} [concrete = constants.%struct_type.a]
// CHECK:STDOUT: %NonInstance1.ref: type = name_ref NonInstance1, file.%NonInstance1.decl [concrete = constants.%NonInstance1.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @struct_type.a.as.NonInstance1.impl.%struct_type.a, @NonInstance1 [concrete = constants.%.dad]
// CHECK:STDOUT: %NonInstanceCall1.decl: %NonInstanceCall1.type = fn_decl @NonInstanceCall1 [concrete = constants.%NonInstanceCall1] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -362,6 +364,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %assoc0.fab: %NonInstance2.assoc_type = assoc_entity element0, @NonInstance2.WithSelf.%NonInstance2.WithSelf.F2.decl [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %empty_tuple.type} [concrete]
// CHECK:STDOUT: %.f6e: <witness> = impl_self_witness %struct_type.b, @NonInstance2 [concrete]
// CHECK:STDOUT: %NonInstance2.impl_witness: <witness> = impl_witness @struct_type.b.as.NonInstance2.impl.%NonInstance2.impl_witness_table [concrete]
// CHECK:STDOUT: %struct_type.b.as.NonInstance2.impl.F2.type: type = fn_type @struct_type.b.as.NonInstance2.impl.F2 [concrete]
// CHECK:STDOUT: %struct_type.b.as.NonInstance2.impl.F2: %struct_type.b.as.NonInstance2.impl.F2.type = struct_value () [concrete]
@@ -430,6 +433,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %empty_tuple.type} [concrete = constants.%struct_type.b]
// CHECK:STDOUT: %NonInstance2.ref: type = name_ref NonInstance2, file.%NonInstance2.decl [concrete = constants.%NonInstance2.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @struct_type.b.as.NonInstance2.impl.%struct_type.b, @NonInstance2 [concrete = constants.%.f6e]
// CHECK:STDOUT: %NonInstanceCall2.decl: %NonInstanceCall2.type = fn_decl @NonInstanceCall2 [concrete = constants.%NonInstanceCall2] {
// CHECK:STDOUT: %n.param_patt: %pattern_type.d5c = value_param_pattern [concrete = constants.%n.param_patt]
// CHECK:STDOUT: %n.patt: %pattern_type.d5c = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt]
@@ -594,6 +598,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %assoc0.a87: %NonInstance3.assoc_type = assoc_entity element0, @NonInstance3.WithSelf.%NonInstance3.WithSelf.F3.decl [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %empty_tuple.type} [concrete]
// CHECK:STDOUT: %.52c: <witness> = impl_self_witness %struct_type.c, @NonInstance3 [concrete]
// CHECK:STDOUT: %NonInstance3.impl_witness: <witness> = impl_witness @struct_type.c.as.NonInstance3.impl.%NonInstance3.impl_witness_table [concrete]
// CHECK:STDOUT: %struct_type.c.as.NonInstance3.impl.F3.type: type = fn_type @struct_type.c.as.NonInstance3.impl.F3 [concrete]
// CHECK:STDOUT: %struct_type.c.as.NonInstance3.impl.F3: %struct_type.c.as.NonInstance3.impl.F3.type = struct_value () [concrete]
@@ -663,6 +668,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %empty_tuple.type} [concrete = constants.%struct_type.c]
// CHECK:STDOUT: %NonInstance3.ref: type = name_ref NonInstance3, file.%NonInstance3.decl [concrete = constants.%NonInstance3.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @struct_type.c.as.NonInstance3.impl.%struct_type.c, @NonInstance3 [concrete = constants.%.52c]
// CHECK:STDOUT: %NonInstanceCallIndirect.decl: %NonInstanceCallIndirect.type = fn_decl @NonInstanceCallIndirect [concrete = constants.%NonInstanceCallIndirect] {
// CHECK:STDOUT: %p.param_patt: %pattern_type.5f5 = value_param_pattern [concrete = constants.%p.param_patt]
// CHECK:STDOUT: %p.patt: %pattern_type.5f5 = at_binding_pattern p, %p.param_patt [concrete = constants.%p.patt]
@@ -833,6 +839,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %assoc0: %Instance1.assoc_type = assoc_entity element0, @Instance1.WithSelf.%Instance1.WithSelf.G1.decl [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %struct_type.d: type = struct_type {.d: %empty_tuple.type} [concrete]
// CHECK:STDOUT: %.100: <witness> = impl_self_witness %struct_type.d, @Instance1 [concrete]
// CHECK:STDOUT: %Instance1.impl_witness: <witness> = impl_witness @struct_type.d.as.Instance1.impl.%Instance1.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.515: type = pattern_type %struct_type.d [concrete]
// CHECK:STDOUT: %self.param_patt.3aa: %pattern_type.515 = value_param_pattern [concrete]
@@ -869,6 +876,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %struct_type.d: type = struct_type {.d: %empty_tuple.type} [concrete = constants.%struct_type.d]
// CHECK:STDOUT: %Instance1.ref: type = name_ref Instance1, file.%Instance1.decl [concrete = constants.%Instance1.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @struct_type.d.as.Instance1.impl.%struct_type.d, @Instance1 [concrete = constants.%.100]
// CHECK:STDOUT: %InstanceCall.decl: %InstanceCall.type = fn_decl @InstanceCall [concrete = constants.%InstanceCall] {
// CHECK:STDOUT: %n.param_patt: %pattern_type.515 = value_param_pattern [concrete = constants.%n.param_patt]
// CHECK:STDOUT: %n.patt: %pattern_type.515 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt]
@@ -1030,6 +1038,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %assoc0: %Instance2.assoc_type = assoc_entity element0, @Instance2.WithSelf.%Instance2.WithSelf.G2.decl [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %struct_type.e: type = struct_type {.e: %empty_tuple.type} [concrete]
// CHECK:STDOUT: %.d50: <witness> = impl_self_witness %struct_type.e, @Instance2 [concrete]
// CHECK:STDOUT: %Instance2.impl_witness: <witness> = impl_witness @struct_type.e.as.Instance2.impl.%Instance2.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.efd: type = pattern_type %struct_type.e [concrete]
// CHECK:STDOUT: %self.param_patt.5cd: %pattern_type.efd = value_param_pattern [concrete]
@@ -1055,6 +1064,7 @@ fn InstanceCallFail() {
// CHECK:STDOUT: %struct_type.e: type = struct_type {.e: %empty_tuple.type} [concrete = constants.%struct_type.e]
// CHECK:STDOUT: %Instance2.ref: type = name_ref Instance2, file.%Instance2.decl [concrete = constants.%Instance2.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @struct_type.e.as.Instance2.impl.%struct_type.e, @Instance2 [concrete = constants.%.d50]
// CHECK:STDOUT: %InstanceCallFail.decl: %InstanceCallFail.type = fn_decl @InstanceCallFail [concrete = constants.%InstanceCallFail] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
+3
View File
@@ -27,6 +27,7 @@ impl i32 as I {}
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.2a7: <witness> = impl_self_witness %i32, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @i32.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %i32, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -51,10 +52,12 @@ impl i32 as I {}
// CHECK:STDOUT: %i32.loc17: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %I.ref.loc17: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc17: <witness> = impl_self_witness @i32.as.I.impl.%i32.loc17, @I [concrete = constants.%.2a7]
// CHECK:STDOUT: impl_decl @i32.as.I.impl [concrete] {} {
// CHECK:STDOUT: %i32.loc19: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %I.ref.loc19: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19: <witness> = impl_self_witness @i32.as.I.impl.%i32.loc19, @I [concrete = constants.%.2a7]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
+2
View File
@@ -27,6 +27,7 @@ impl i32 as Empty {
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.d34: <witness> = impl_self_witness %i32, @Empty [concrete]
// CHECK:STDOUT: %Empty.impl_witness: <witness> = impl_witness @i32.as.Empty.impl.%Empty.impl_witness_table [concrete]
// CHECK:STDOUT: %Empty.facet: %Empty.type = facet_value %i32, (%Empty.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -51,6 +52,7 @@ impl i32 as Empty {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %Empty.ref: type = name_ref Empty, file.%Empty.decl [concrete = constants.%Empty.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @i32.as.Empty.impl.%i32, @Empty [concrete = constants.%.d34]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Empty {
+2
View File
@@ -139,6 +139,7 @@ impl C as I {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -147,6 +148,7 @@ impl C as I {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @C.as.I.impl.%C.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: impl @C.as.I.impl: %C.ref as %I.ref {
+2
View File
@@ -112,6 +112,7 @@ extend impl nonexistent* as I {}
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.ba1: <witness> = impl_self_witness %C, @HasF [concrete]
// CHECK:STDOUT: %HasF.impl_witness: <witness> = impl_witness @C.as.HasF.impl.%HasF.impl_witness_table [concrete]
// CHECK:STDOUT: %C.as.HasF.impl.F.type: type = fn_type @C.as.HasF.impl.F [concrete]
// CHECK:STDOUT: %C.as.HasF.impl.F: %C.as.HasF.impl.F.type = struct_value () [concrete]
@@ -139,6 +140,7 @@ extend impl nonexistent* as I {}
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @C.as.HasF.impl.%Self.ref, @HasF [concrete = constants.%.ba1]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
+8 -2
View File
@@ -86,6 +86,7 @@ class X(U: type) {
// CHECK:STDOUT: %complete_type.0c6: <witness> = complete_type_witness %struct_type.x.a15 [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %HasF.type.9e1: type = facet_type <@HasF, @HasF(%Param)> [concrete]
// CHECK:STDOUT: %.cb5: <witness> = impl_self_witness %C, @HasF, @HasF(%Param) [concrete]
// CHECK:STDOUT: %HasF.impl_witness: <witness> = impl_witness @C.as.HasF.impl.%HasF.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.ef3: %HasF.type.9e1 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %HasF.WithSelf.F.type.b42: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%Param, %Self.822) [symbolic]
@@ -274,6 +275,7 @@ class X(U: type) {
// CHECK:STDOUT: %Param.ref: type = name_ref Param, file.%Param.decl [concrete = constants.%Param]
// CHECK:STDOUT: %HasF.type: type = facet_type <@HasF, @HasF(constants.%Param)> [concrete = constants.%HasF.type.9e1]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc13: <witness> = impl_self_witness @C.as.HasF.impl.%Self.ref, @HasF, @HasF(constants.%Param) [concrete = constants.%.cb5]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -472,6 +474,7 @@ class X(U: type) {
// CHECK:STDOUT: %X.generic: %X.type = struct_value () [concrete]
// CHECK:STDOUT: %X: type = class_type @X, @X(%U) [symbolic]
// CHECK:STDOUT: %I.type.3fe556.2: type = facet_type <@I, @I(%U)> [symbolic]
// CHECK:STDOUT: %.3db: <witness> = impl_self_witness %X, @I, @I(%U) [symbolic]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @X.as.I.impl.%I.impl_witness_table, @X.as.I.impl(%U) [symbolic]
// CHECK:STDOUT: %Self.1916c4.2: %I.type.3fe556.2 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %I.WithSelf.F.type.09f79b.2: type = fn_type @I.WithSelf.F, @I.WithSelf(%U, %Self.1916c4.1) [symbolic]
@@ -579,6 +582,7 @@ class X(U: type) {
// CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)]
// CHECK:STDOUT: %X: type = class_type @X, @X(%U) [symbolic = %X (constants.%X)]
// CHECK:STDOUT: %I.type.loc9_21.1: type = facet_type <@I, @I(%U)> [symbolic = %I.type.loc9_21.1 (constants.%I.type.3fe556.2)]
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness %X, @I, @I(%U) [symbolic = %.loc9 (constants.%.3db)]
// CHECK:STDOUT: %I.impl_witness.loc9_23.2: <witness> = impl_witness %I.impl_witness_table, @X.as.I.impl(%U) [symbolic = %I.impl_witness.loc9_23.2 (constants.%I.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -629,7 +633,8 @@ class X(U: type) {
// CHECK:STDOUT: %U.ref: type = name_ref U, @X.%U.loc8_10.2 [symbolic = %U (constants.%U)]
// CHECK:STDOUT: %I.type.loc9_21.2: type = facet_type <@I, @I(constants.%U)> [symbolic = %I.type.loc9_21.1 (constants.%I.type.3fe556.2)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: type = specific_constant @X.as.I.impl.%I.type.loc9_21.2, @X.as.I.impl(constants.%U) [symbolic = %I.type (constants.%I.type.3fe556.2)]
// CHECK:STDOUT: %.loc9_23: <witness> = impl_self_witness @X.as.I.impl.%Self.ref, @I, @I(constants.%U) [symbolic = @X.as.I.impl.%.loc9 (constants.%.3db)]
// CHECK:STDOUT: %.loc9_21: type = specific_constant @X.as.I.impl.%I.type.loc9_21.2, @X.as.I.impl(constants.%U) [symbolic = %I.type (constants.%I.type.3fe556.2)]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -637,7 +642,7 @@ class X(U: type) {
// CHECK:STDOUT: .Self = constants.%X
// CHECK:STDOUT: .I = <poisoned>
// CHECK:STDOUT: .U = <poisoned>
// CHECK:STDOUT: extend %.loc9
// CHECK:STDOUT: extend %.loc9_21
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -718,6 +723,7 @@ class X(U: type) {
// CHECK:STDOUT: %U => constants.%U
// CHECK:STDOUT: %X => constants.%X
// CHECK:STDOUT: %I.type.loc9_21.1 => constants.%I.type.3fe556.2
// CHECK:STDOUT: %.loc9 => constants.%.3db
// CHECK:STDOUT: %I.impl_witness.loc9_23.2 => constants.%I.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
+3
View File
@@ -37,6 +37,7 @@ impl AC as AI {}
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.e103db.1.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -58,10 +59,12 @@ impl AC as AI {}
// CHECK:STDOUT: %AC.ref: type = name_ref AC, file.%AC [concrete = constants.%C]
// CHECK:STDOUT: %AI.ref: type = name_ref AI, file.%AI [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc21: <witness> = impl_self_witness @C.as.I.impl.e103db.1.%AC.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: impl_decl @C.as.I.impl.e103db.2 [concrete] {} {
// CHECK:STDOUT: %AC.ref: type = name_ref AC, file.%AC [concrete = constants.%C]
// CHECK:STDOUT: %AI.ref: type = name_ref AI, file.%AI [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc30: <witness> = impl_self_witness @C.as.I.impl.e103db.2.%AC.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -47,6 +47,7 @@ fn InstanceCall(n: i32) {
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.e1f: <witness> = impl_self_witness %i32, @Simple [concrete]
// CHECK:STDOUT: %Simple.impl_witness: <witness> = impl_witness @i32.as.Simple.impl.%Simple.impl_witness_table [concrete]
// CHECK:STDOUT: %i32.as.Simple.impl.G.type.321a2c.1: type = fn_type @i32.as.Simple.impl.G.loc24_25.1 [concrete]
// CHECK:STDOUT: %i32.as.Simple.impl.G.d407b2.1: %i32.as.Simple.impl.G.type.321a2c.1 = struct_value () [concrete]
@@ -87,6 +88,7 @@ fn InstanceCall(n: i32) {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %Simple.ref: type = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19: <witness> = impl_self_witness @i32.as.Simple.impl.%i32, @Simple [concrete = constants.%.e1f]
// CHECK:STDOUT: %InstanceCall.decl: %InstanceCall.type = fn_decl @InstanceCall [concrete = constants.%InstanceCall] {
// CHECK:STDOUT: %n.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%n.param_patt]
// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = at_binding_pattern n, %n.param_patt [concrete = constants.%n.patt]
@@ -46,6 +46,7 @@ class C {
// CHECK:STDOUT: %GenericInterface.assoc_type: type = assoc_entity_type @GenericInterface, @GenericInterface(%T) [symbolic]
// CHECK:STDOUT: %assoc0: %GenericInterface.assoc_type = assoc_entity element0, @GenericInterface.WithSelf.%GenericInterface.WithSelf.F.decl [symbolic]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.9b3: <witness> = impl_self_witness %C, @GenericInterface, @GenericInterface(%T) [symbolic]
// CHECK:STDOUT: %GenericInterface.impl_witness: <witness> = impl_witness @C.as.GenericInterface.impl.%GenericInterface.impl_witness_table, @C.as.GenericInterface.impl(%T) [symbolic]
// CHECK:STDOUT: %C.as.GenericInterface.impl.F.type: type = fn_type @C.as.GenericInterface.impl.F, @C.as.GenericInterface.impl(%T) [symbolic]
// CHECK:STDOUT: %C.as.GenericInterface.impl.F: %C.as.GenericInterface.impl.F.type = struct_value () [symbolic]
@@ -109,6 +110,7 @@ class C {
// CHECK:STDOUT: %T.patt.loc24_24.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_24.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc24_24.1: type = symbolic_binding T, 0 [symbolic = %T.loc24_24.1 (constants.%T)]
// CHECK:STDOUT: %GenericInterface.type.loc24_53.1: type = facet_type <@GenericInterface, @GenericInterface(%T.loc24_24.1)> [symbolic = %GenericInterface.type.loc24_53.1 (constants.%GenericInterface.type.4e1)]
// CHECK:STDOUT: %.loc24_55: <witness> = impl_self_witness constants.%C, @GenericInterface, @GenericInterface(%T.loc24_24.1) [symbolic = %.loc24_55 (constants.%.9b3)]
// CHECK:STDOUT: %GenericInterface.impl_witness.loc24_55.2: <witness> = impl_witness %GenericInterface.impl_witness_table, @C.as.GenericInterface.impl(%T.loc24_24.1) [symbolic = %GenericInterface.impl_witness.loc24_55.2 (constants.%GenericInterface.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -149,6 +151,7 @@ class C {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc24_24.2: type = symbolic_binding T, 0 [symbolic = %T.loc24_24.1 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc24: <witness> = impl_self_witness @C.as.GenericInterface.impl.%Self.ref, @GenericInterface, @GenericInterface(constants.%T) [symbolic = @C.as.GenericInterface.impl.%.loc24_55 (constants.%.9b3)]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -209,6 +212,7 @@ class C {
// CHECK:STDOUT: %T.patt.loc24_24.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc24_24.1 => constants.%T
// CHECK:STDOUT: %GenericInterface.type.loc24_53.1 => constants.%GenericInterface.type.4e1
// CHECK:STDOUT: %.loc24_55 => constants.%.9b3
// CHECK:STDOUT: %GenericInterface.impl_witness.loc24_55.2 => constants.%GenericInterface.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -71,6 +71,7 @@ fn F() {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %.2ef: <witness> = impl_self_witness %empty_tuple.type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @empty_tuple.type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -93,6 +94,7 @@ fn F() {
// CHECK:STDOUT: %.loc9_14.2: type = converted %.loc9_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @empty_tuple.type.as.I.impl.%.loc9_14.2, @I [concrete = constants.%.2ef]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -126,6 +128,7 @@ fn F() {
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %.948: <witness> = impl_self_witness %empty_struct_type, @J [concrete]
// CHECK:STDOUT: %J.impl_witness: <witness> = impl_witness @empty_struct_type.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -174,6 +177,7 @@ fn F() {
// CHECK:STDOUT: %.loc10_16.2: type = converted %.loc10_16.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @empty_struct_type.as.J.impl.%.loc10_16.2, @J [concrete = constants.%.948]
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -192,6 +196,7 @@ fn F() {
// CHECK:STDOUT: %<error>.as.Z.impl.Zero.type: type = fn_type @<error>.as.Z.impl.Zero, @<error>.as.Z.impl(%Self.cb6) [symbolic]
// CHECK:STDOUT: %<error>.as.Z.impl.Zero: %<error>.as.Z.impl.Zero.type = struct_value () [symbolic]
// CHECK:STDOUT: %Point: type = class_type @Point [concrete]
// CHECK:STDOUT: %.354: <witness> = impl_self_witness %Point, @Z [concrete]
// CHECK:STDOUT: %Z.impl_witness: <witness> = impl_witness @Point.as.Z.impl.%Z.impl_witness_table [concrete]
// CHECK:STDOUT: %Point.as.Z.impl.Zero.type: type = fn_type @Point.as.Z.impl.Zero [concrete]
// CHECK:STDOUT: %Point.as.Z.impl.Zero: %Point.as.Z.impl.Zero.type = struct_value () [concrete]
@@ -248,6 +253,7 @@ fn F() {
// CHECK:STDOUT: impl_decl @<error>.as.Z.impl [concrete] {} {
// CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness <error>, @Z [concrete = <error>]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -291,6 +297,7 @@ fn F() {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point]
// CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc16: <witness> = impl_self_witness @Point.as.Z.impl.%Self.ref, @Z [concrete = constants.%.354]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -61,7 +61,9 @@ class E {
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %D: type = class_type @D [concrete]
// CHECK:STDOUT: %.393: <witness> = impl_self_witness %D, @I [concrete]
// CHECK:STDOUT: %E: type = class_type @E [concrete]
// CHECK:STDOUT: %.e0d: <witness> = impl_self_witness %E, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.6e5: <witness> = impl_witness @E.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %E, (%I.impl_witness.6e5) [concrete]
// CHECK:STDOUT: }
@@ -123,6 +125,7 @@ class E {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22: <witness> = impl_self_witness <error>, @I [concrete = <error>]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -137,6 +140,7 @@ class E {
// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc33: <witness> = impl_self_witness @D.as.I.impl.%D.ref, @I [concrete = constants.%.393]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -152,6 +156,7 @@ class E {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%E [concrete = constants.%E]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc48: <witness> = impl_self_witness @E.as.I.impl.%Self.ref, @I [concrete = constants.%.e0d]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -31,6 +31,7 @@ interface I {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic]
// CHECK:STDOUT: %.d54: <witness> = impl_self_witness %C, @I [symbolic]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%Self) [symbolic]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
@@ -63,6 +64,7 @@ interface I {
// CHECK:STDOUT: generic impl @C.as.I.impl(@I.%Self: %I.type) {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)]
// CHECK:STDOUT: %.loc24: <witness> = impl_self_witness %C, @I [symbolic = %.loc24 (constants.%.d54)]
// CHECK:STDOUT: %I.impl_witness.loc24_21.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl(%Self) [symbolic = %I.impl_witness.loc24_21.2 (constants.%I.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %Self.ref as %I.ref;
@@ -76,6 +78,7 @@ interface I {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [symbolic = %C (constants.%C)]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc24: <witness> = impl_self_witness @C.as.I.impl.%Self.ref, @I [symbolic = @C.as.I.impl.%.loc24 (constants.%.d54)]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -93,6 +96,7 @@ interface I {
// CHECK:STDOUT: specific @C.as.I.impl(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %C => constants.%C
// CHECK:STDOUT: %.loc24 => constants.%.d54
// CHECK:STDOUT: %I.impl_witness.loc24_21.2 => constants.%I.impl_witness
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -35,6 +35,7 @@ fn F(c: C) {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete]
@@ -71,6 +72,7 @@ fn F(c: C) {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc25: <witness> = impl_self_witness @C.as.I.impl.%Self.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -132,6 +132,7 @@ class X {
// CHECK:STDOUT: impl_decl @<error>.as.I.impl [concrete] {} {
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness <error>, @I [concrete = <error>]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -225,6 +226,7 @@ class X {
// CHECK:STDOUT: impl_decl @<error>.as.J.impl [concrete] {} {
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness <error>, @J [concrete = <error>]
// CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G]
// CHECK:STDOUT: %G.call: init %empty_tuple.type = call %G.ref()
// CHECK:STDOUT: return
@@ -255,6 +257,7 @@ class X {
// CHECK:STDOUT: %<error>.as.Z.impl.Method: %<error>.as.Z.impl.Method.type = struct_value () [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.as_type.0cf [symbolic]
// CHECK:STDOUT: %Point: type = class_type @Point [concrete]
// CHECK:STDOUT: %.354: <witness> = impl_self_witness %Point, @Z [concrete]
// CHECK:STDOUT: %Z.impl_witness: <witness> = impl_witness @Point.as.Z.impl.%Z.impl_witness_table [concrete]
// CHECK:STDOUT: %Point.as.Z.impl.Zero.type: type = fn_type @Point.as.Z.impl.Zero [concrete]
// CHECK:STDOUT: %Point.as.Z.impl.Zero: %Point.as.Z.impl.Zero.type = struct_value () [concrete]
@@ -329,6 +332,7 @@ class X {
// CHECK:STDOUT: impl_decl @<error>.as.Z.impl [concrete] {} {
// CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness <error>, @Z [concrete = <error>]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -397,6 +401,7 @@ class X {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point]
// CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @Point.as.Z.impl.%Self.ref, @Z [concrete = constants.%.354]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -558,6 +563,7 @@ class X {
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %X: type = class_type @X [concrete]
// CHECK:STDOUT: %.57f: <witness> = impl_self_witness %X, @A [concrete]
// CHECK:STDOUT: %A.impl_witness: <witness> = impl_witness @X.as.A.impl.%A.impl_witness_table [concrete]
// CHECK:STDOUT: %X.as.A.impl.B.type: type = fn_type @X.as.A.impl.B [concrete]
// CHECK:STDOUT: %X.as.A.impl.B: %X.as.A.impl.B.type = struct_value () [concrete]
@@ -623,6 +629,7 @@ class X {
// CHECK:STDOUT: impl_decl @<error>.as.C.impl [concrete] {} {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc17: <witness> = impl_self_witness <error>, @C [concrete = <error>]
// CHECK:STDOUT: %X.as.A.impl.B.decl: %X.as.A.impl.B.type = fn_decl @X.as.A.impl.B [concrete = constants.%X.as.A.impl.B] {} {}
// CHECK:STDOUT: %A.impl_witness_table = impl_witness_table (%X.as.A.impl.B.decl), @X.as.A.impl [concrete]
// CHECK:STDOUT: %A.impl_witness: <witness> = impl_witness %A.impl_witness_table [concrete = constants.%A.impl_witness]
@@ -646,6 +653,7 @@ class X {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X]
// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @X.as.A.impl.%Self.ref, @A [concrete = constants.%.57f]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -32,6 +32,7 @@ impl () as I {}
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%T [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %.2ef: <witness> = impl_self_witness %empty_tuple.type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @empty_tuple.type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_tuple.type, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -46,6 +47,7 @@ impl () as I {}
// CHECK:STDOUT: %.loc24_7.2: type = converted %.loc24_7.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc24: <witness> = impl_self_witness @empty_tuple.type.as.I.impl.%.loc24_7.2, @I [concrete = constants.%.2ef]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -240,6 +240,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0.6c9: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %NoF: type = class_type @NoF [concrete]
// CHECK:STDOUT: %.6c7: <witness> = impl_self_witness %NoF, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.85e: <witness> = impl_witness @NoF.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet.752: %I.type = facet_value %NoF, (%I.impl_witness.85e) [concrete]
// CHECK:STDOUT: %I.WithSelf.F.type.3d3: type = fn_type @I.WithSelf.F, @I.WithSelf(%I.facet.752) [concrete]
@@ -247,6 +248,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %FNotFunction: type = class_type @FNotFunction [concrete]
// CHECK:STDOUT: %.d4c: <witness> = impl_self_witness %FNotFunction, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.b51: <witness> = impl_witness @FNotFunction.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %F: type = class_type @F [concrete]
// CHECK:STDOUT: %I.facet.010: %I.type = facet_value %FNotFunction, (%I.impl_witness.b51) [concrete]
@@ -255,11 +257,13 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %PossiblyF.type: type = fn_type @PossiblyF [concrete]
// CHECK:STDOUT: %PossiblyF: %PossiblyF.type = struct_value () [concrete]
// CHECK:STDOUT: %FAlias: type = class_type @FAlias [concrete]
// CHECK:STDOUT: %.a11: <witness> = impl_self_witness %FAlias, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.e2e: <witness> = impl_witness @FAlias.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet.f6f: %I.type = facet_value %FAlias, (%I.impl_witness.e2e) [concrete]
// CHECK:STDOUT: %I.WithSelf.F.type.751: type = fn_type @I.WithSelf.F, @I.WithSelf(%I.facet.f6f) [concrete]
// CHECK:STDOUT: %I.WithSelf.F.6d6: %I.WithSelf.F.type.751 = struct_value () [concrete]
// CHECK:STDOUT: %FExtraParam: type = class_type @FExtraParam [concrete]
// CHECK:STDOUT: %.44b: <witness> = impl_self_witness %FExtraParam, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.99e: <witness> = impl_witness @FExtraParam.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete]
// CHECK:STDOUT: %b.param_patt.792: %pattern_type.831 = value_param_pattern [concrete]
@@ -272,6 +276,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %FExtraParam.as.I.impl.F.type.ec7b0b.2: type = fn_type @FExtraParam.as.I.impl.F.loc69_18.2 [concrete]
// CHECK:STDOUT: %FExtraParam.as.I.impl.F.ef9801.2: %FExtraParam.as.I.impl.F.type.ec7b0b.2 = struct_value () [concrete]
// CHECK:STDOUT: %FExtraImplicitParam: type = class_type @FExtraImplicitParam [concrete]
// CHECK:STDOUT: %.77c: <witness> = impl_self_witness %FExtraImplicitParam, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.2da: <witness> = impl_witness @FExtraImplicitParam.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.54d: type = pattern_type %FExtraImplicitParam [concrete]
// CHECK:STDOUT: %self.param_patt.f41: %pattern_type.54d = value_param_pattern [concrete]
@@ -284,6 +289,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %FExtraImplicitParam.as.I.impl.F.type.54cac2.2: type = fn_type @FExtraImplicitParam.as.I.impl.F.loc85_15.2 [concrete]
// CHECK:STDOUT: %FExtraImplicitParam.as.I.impl.F.a42f35.2: %FExtraImplicitParam.as.I.impl.F.type.54cac2.2 = struct_value () [concrete]
// CHECK:STDOUT: %FExtraReturnType: type = class_type @FExtraReturnType [concrete]
// CHECK:STDOUT: %.ebd: <witness> = impl_self_witness %FExtraReturnType, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.b63: <witness> = impl_witness @FExtraReturnType.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete]
// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete]
@@ -302,6 +308,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete]
// CHECK:STDOUT: %assoc0.000: %J.assoc_type = assoc_entity element0, @J.WithSelf.%J.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %FMissingParam: type = class_type @FMissingParam [concrete]
// CHECK:STDOUT: %.599: <witness> = impl_self_witness %FMissingParam, @J [concrete]
// CHECK:STDOUT: %J.impl_witness.a34: <witness> = impl_witness @FMissingParam.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: %FMissingParam.as.J.impl.F.type.aad6ec.1: type = fn_type @FMissingParam.as.J.impl.F.loc117_29.1 [concrete]
// CHECK:STDOUT: %FMissingParam.as.J.impl.F.dd09dc.1: %FMissingParam.as.J.impl.F.type.aad6ec.1 = struct_value () [concrete]
@@ -311,6 +318,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %FMissingParam.as.J.impl.F.type.aad6ec.2: type = fn_type @FMissingParam.as.J.impl.F.loc117_29.2 [concrete]
// CHECK:STDOUT: %FMissingParam.as.J.impl.F.dd09dc.2: %FMissingParam.as.J.impl.F.type.aad6ec.2 = struct_value () [concrete]
// CHECK:STDOUT: %FMissingImplicitParam: type = class_type @FMissingImplicitParam [concrete]
// CHECK:STDOUT: %.f79: <witness> = impl_self_witness %FMissingImplicitParam, @J [concrete]
// CHECK:STDOUT: %J.impl_witness.7e6: <witness> = impl_witness @FMissingImplicitParam.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.type.f666a8.1: type = fn_type @FMissingImplicitParam.as.J.impl.F.loc130_26.1 [concrete]
// CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.620ed1.1: %FMissingImplicitParam.as.J.impl.F.type.f666a8.1 = struct_value () [concrete]
@@ -320,6 +328,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.type.f666a8.2: type = fn_type @FMissingImplicitParam.as.J.impl.F.loc130_26.2 [concrete]
// CHECK:STDOUT: %FMissingImplicitParam.as.J.impl.F.620ed1.2: %FMissingImplicitParam.as.J.impl.F.type.f666a8.2 = struct_value () [concrete]
// CHECK:STDOUT: %FMissingReturnType: type = class_type @FMissingReturnType [concrete]
// CHECK:STDOUT: %.199: <witness> = impl_self_witness %FMissingReturnType, @J [concrete]
// CHECK:STDOUT: %J.impl_witness.05c: <witness> = impl_witness @FMissingReturnType.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.type.9cd56a.1: type = fn_type @FMissingReturnType.as.J.impl.F.loc148_30.1 [concrete]
// CHECK:STDOUT: %FMissingReturnType.as.J.impl.F.6975be.1: %FMissingReturnType.as.J.impl.F.type.9cd56a.1 = struct_value () [concrete]
@@ -338,6 +347,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.945: %ImplicitAs.WithSelf.Convert.type.97e = struct_value () [symbolic]
// CHECK:STDOUT: %assoc0.0ac: %ImplicitAs.assoc_type.fcc = assoc_entity element0, imports.%Core.import_ref.f9d [symbolic]
// CHECK:STDOUT: %FDifferentParamType: type = class_type @FDifferentParamType [concrete]
// CHECK:STDOUT: %.593: <witness> = impl_self_witness %FDifferentParamType, @J [concrete]
// CHECK:STDOUT: %J.impl_witness.553: <witness> = impl_witness @FDifferentParamType.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.5d3: type = pattern_type %FDifferentParamType [concrete]
// CHECK:STDOUT: %b.param_patt.0a8: %pattern_type.5d3 = value_param_pattern [concrete]
@@ -353,6 +363,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %ImplicitAs.assoc_type.503: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%FDifferentParamType) [concrete]
// CHECK:STDOUT: %assoc0.603: %ImplicitAs.assoc_type.503 = assoc_entity element0, imports.%Core.import_ref.cb2 [concrete]
// CHECK:STDOUT: %FDifferentImplicitParamType: type = class_type @FDifferentImplicitParamType [concrete]
// CHECK:STDOUT: %.46c: <witness> = impl_self_witness %FDifferentImplicitParamType, @J [concrete]
// CHECK:STDOUT: %J.impl_witness.cc3: <witness> = impl_witness @FDifferentImplicitParamType.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.1bc: type = pattern_type %FDifferentImplicitParamType [concrete]
// CHECK:STDOUT: %self.param_patt.ea6: %pattern_type.1bc = value_param_pattern [concrete]
@@ -368,6 +379,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %ImplicitAs.assoc_type.36e: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%FDifferentImplicitParamType) [concrete]
// CHECK:STDOUT: %assoc0.769: %ImplicitAs.assoc_type.36e = assoc_entity element0, imports.%Core.import_ref.cb2 [concrete]
// CHECK:STDOUT: %FDifferentReturnType: type = class_type @FDifferentReturnType [concrete]
// CHECK:STDOUT: %.ce7: <witness> = impl_self_witness %FDifferentReturnType, @J [concrete]
// CHECK:STDOUT: %J.impl_witness.6ab: <witness> = impl_witness @FDifferentReturnType.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: %.1f5: Core.Form = init_form %FDifferentReturnType [concrete]
// CHECK:STDOUT: %pattern_type.b9f: type = pattern_type %FDifferentReturnType [concrete]
@@ -406,6 +418,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %SelfNested.assoc_type: type = assoc_entity_type @SelfNested [concrete]
// CHECK:STDOUT: %assoc0.219: %SelfNested.assoc_type = assoc_entity element0, @SelfNested.WithSelf.%SelfNested.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %SelfNestedBadParam: type = class_type @SelfNestedBadParam [concrete]
// CHECK:STDOUT: %.83b: <witness> = impl_self_witness %SelfNestedBadParam, @SelfNested [concrete]
// CHECK:STDOUT: %SelfNested.impl_witness.d7c: <witness> = impl_witness @SelfNestedBadParam.as.SelfNested.impl.%SelfNested.impl_witness_table [concrete]
// CHECK:STDOUT: %ptr.52e: type = ptr_type %SelfNestedBadParam [concrete]
// CHECK:STDOUT: %struct_type.x.y.fb8: type = struct_type {.x: %i32, .y: %i32} [concrete]
@@ -436,6 +449,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %ImplicitAs.assoc_type.e23: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%i32) [concrete]
// CHECK:STDOUT: %assoc0.368: %ImplicitAs.assoc_type.e23 = assoc_entity element0, imports.%Core.import_ref.cb2 [concrete]
// CHECK:STDOUT: %SelfNestedBadReturnType: type = class_type @SelfNestedBadReturnType [concrete]
// CHECK:STDOUT: %.020: <witness> = impl_self_witness %SelfNestedBadReturnType, @SelfNested [concrete]
// CHECK:STDOUT: %SelfNested.impl_witness.abd: <witness> = impl_witness @SelfNestedBadReturnType.as.SelfNested.impl.%SelfNested.impl_witness_table [concrete]
// CHECK:STDOUT: %ptr.f55: type = ptr_type %SelfNestedBadReturnType [concrete]
// CHECK:STDOUT: %struct_type.x.y.f6a: type = struct_type {.x: %SelfNestedBadReturnType, .y: %i32} [concrete]
@@ -1060,6 +1074,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NoF [concrete = constants.%NoF]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc25: <witness> = impl_self_witness @NoF.as.I.impl.%Self.ref, @I [concrete = constants.%.6c7]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1073,6 +1088,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FNotFunction [concrete = constants.%FNotFunction]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc29: <witness> = impl_self_witness @FNotFunction.as.I.impl.%Self.ref, @I [concrete = constants.%.d4c]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1088,6 +1104,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FAlias [concrete = constants.%FAlias]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc45: <witness> = impl_self_witness @FAlias.as.I.impl.%Self.ref, @I [concrete = constants.%.a11]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1102,6 +1119,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraParam [concrete = constants.%FExtraParam]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc58: <witness> = impl_self_witness @FExtraParam.as.I.impl.%Self.ref, @I [concrete = constants.%.44b]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1115,6 +1133,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraImplicitParam [concrete = constants.%FExtraImplicitParam]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc74: <witness> = impl_self_witness @FExtraImplicitParam.as.I.impl.%Self.ref, @I [concrete = constants.%.77c]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1128,6 +1147,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraReturnType [concrete = constants.%FExtraReturnType]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc91: <witness> = impl_self_witness @FExtraReturnType.as.I.impl.%Self.ref, @I [concrete = constants.%.ebd]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1141,6 +1161,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FMissingParam [concrete = constants.%FMissingParam]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc106: <witness> = impl_self_witness @FMissingParam.as.J.impl.%Self.ref, @J [concrete = constants.%.599]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1154,6 +1175,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FMissingImplicitParam [concrete = constants.%FMissingImplicitParam]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc122: <witness> = impl_self_witness @FMissingImplicitParam.as.J.impl.%Self.ref, @J [concrete = constants.%.f79]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1167,6 +1189,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FMissingReturnType [concrete = constants.%FMissingReturnType]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc135: <witness> = impl_self_witness @FMissingReturnType.as.J.impl.%Self.ref, @J [concrete = constants.%.199]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1180,6 +1203,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentParamType [concrete = constants.%FDifferentParamType]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc153: <witness> = impl_self_witness @FDifferentParamType.as.J.impl.%Self.ref, @J [concrete = constants.%.593]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1193,6 +1217,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentImplicitParamType [concrete = constants.%FDifferentImplicitParamType]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc168: <witness> = impl_self_witness @FDifferentImplicitParamType.as.J.impl.%Self.ref, @J [concrete = constants.%.46c]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1206,6 +1231,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentReturnType [concrete = constants.%FDifferentReturnType]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc181: <witness> = impl_self_witness @FDifferentReturnType.as.J.impl.%Self.ref, @J [concrete = constants.%.ce7]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1219,6 +1245,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SelfNestedBadParam [concrete = constants.%SelfNestedBadParam]
// CHECK:STDOUT: %SelfNested.ref: type = name_ref SelfNested, file.%SelfNested.decl [concrete = constants.%SelfNested.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc203: <witness> = impl_self_witness @SelfNestedBadParam.as.SelfNested.impl.%Self.ref, @SelfNested [concrete = constants.%.83b]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -1233,6 +1260,7 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SelfNestedBadReturnType [concrete = constants.%SelfNestedBadReturnType]
// CHECK:STDOUT: %SelfNested.ref: type = name_ref SelfNested, file.%SelfNested.decl [concrete = constants.%SelfNested.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc216: <witness> = impl_self_witness @SelfNestedBadReturnType.as.SelfNested.impl.%Self.ref, @SelfNested [concrete = constants.%.020]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -54,6 +54,7 @@ impl true as I {}
// CHECK:STDOUT: %.loc24: type = converted %true, <error> [concrete = <error>]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc24: <witness> = impl_self_witness <error>, @I [concrete = <error>]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -34,6 +34,7 @@ impl i32 as I {}
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.2a7: <witness> = impl_self_witness %i32, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @i32.as.I.impl.6a2a49.1.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %i32, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -58,10 +59,12 @@ impl i32 as I {}
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc17: <witness> = impl_self_witness @i32.as.I.impl.6a2a49.1.%i32, @I [concrete = constants.%.2a7]
// CHECK:STDOUT: impl_decl @i32.as.I.impl.6a2a49.2 [concrete] {} {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc26: <witness> = impl_self_witness @i32.as.I.impl.6a2a49.2.%i32, @I [concrete = constants.%.2a7]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -68,6 +68,7 @@ impl i32 as I {
// CHECK:STDOUT: %I.WithSelf.F.ec6: %I.WithSelf.F.type.dcc = struct_value () [symbolic]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0.6c9: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %.cb2: <witness> = impl_self_witness bool, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.020: <witness> = impl_witness @bool.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet.11c: %I.type = facet_value bool, (%I.impl_witness.020) [concrete]
// CHECK:STDOUT: %C.071: type = class_type @C, @C(%I.type, %I.facet.11c) [concrete]
@@ -82,6 +83,7 @@ impl i32 as I {
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %.2a7: <witness> = impl_self_witness %i32, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.903: <witness> = impl_witness @i32.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %X.patt.014: %pattern_type.98f = symbolic_binding_pattern X, 1 [symbolic]
// CHECK:STDOUT: %C.8dc: type = class_type @C, @C(type, %i32) [concrete]
@@ -156,10 +158,12 @@ impl i32 as I {
// CHECK:STDOUT: %.loc24: type = type_literal bool [concrete = bool]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc24: <witness> = impl_self_witness @bool.as.I.impl.%.loc24, @I [concrete = constants.%.cb2]
// CHECK:STDOUT: impl_decl @i32.as.I.impl [concrete] {} {
// CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc31: <witness> = impl_self_witness @i32.as.I.impl.%i32, @I [concrete = constants.%.2a7]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
+36
View File
@@ -236,6 +236,7 @@ impl C as Y {}
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %.aaf: <witness> = impl_self_witness %empty_struct_type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @empty_struct_type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_struct_type, (%I.impl_witness) [concrete]
@@ -260,12 +261,14 @@ impl C as Y {}
// CHECK:STDOUT: %.loc4_7.2: type = converted %.loc4_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %I.ref.loc4: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc4: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc4_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: %I.decl.loc6: type = interface_decl @I [concrete = constants.%I.type] {} {}
// CHECK:STDOUT: impl_decl @empty_struct_type.as.I.impl [concrete] {} {
// CHECK:STDOUT: %.loc7_7.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
// CHECK:STDOUT: %.loc7_7.2: type = converted %.loc7_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %I.ref.loc7: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc7_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -302,6 +305,7 @@ impl C as Y {}
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %.aaf: <witness> = impl_self_witness %empty_struct_type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @empty_struct_type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %I.WithSelf.G.type.d1f: type = fn_type @I.WithSelf.G, @I.WithSelf(%Self) [symbolic]
@@ -334,12 +338,14 @@ impl C as Y {}
// CHECK:STDOUT: %.loc4_7.2: type = converted %.loc4_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %I.ref.loc4: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc4: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc4_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: %I.decl.loc6: type = interface_decl @I [concrete = constants.%I.type] {} {}
// CHECK:STDOUT: impl_decl @empty_struct_type.as.I.impl [concrete] {} {
// CHECK:STDOUT: %.loc9_7.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
// CHECK:STDOUT: %.loc9_7.2: type = converted %.loc9_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %I.ref.loc9: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc9_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -412,6 +418,7 @@ impl C as Y {}
// CHECK:STDOUT: %type.as.BitAndWith.impl.Op.type: type = fn_type @type.as.BitAndWith.impl.Op [concrete]
// CHECK:STDOUT: %type.as.BitAndWith.impl.Op: %type.as.BitAndWith.impl.Op.type = struct_value () [concrete]
// CHECK:STDOUT: %type.as.BitAndWith.impl.Op.bound: <bound method> = bound_method %I.type, %type.as.BitAndWith.impl.Op [concrete]
// CHECK:STDOUT: %.aaf: <witness> = impl_self_witness %empty_struct_type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @empty_struct_type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.37e: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_struct_type, (%I.impl_witness) [concrete]
@@ -446,6 +453,7 @@ impl C as Y {}
// CHECK:STDOUT: %bound_method.loc4: <bound method> = bound_method %I.ref.loc4_12, %impl.elem0.loc4 [concrete = constants.%type.as.BitAndWith.impl.Op.bound]
// CHECK:STDOUT: %type.as.BitAndWith.impl.Op.call.loc4: init type = call %bound_method.loc4(%I.ref.loc4_12, %I.ref.loc4_16) [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc4_17: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc4_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: %I.decl.loc6: type = interface_decl @I [concrete = constants.%I.type] {} {}
// CHECK:STDOUT: %.loc7_14.1: type = value_of_initializer @empty_struct_type.as.I.impl.%type.as.BitAndWith.impl.Op.call.loc7 [concrete = constants.%I.type]
// CHECK:STDOUT: %.loc7_14.2: type = converted @empty_struct_type.as.I.impl.%type.as.BitAndWith.impl.Op.call.loc7, %.loc7_14.1 [concrete = constants.%I.type]
@@ -458,6 +466,7 @@ impl C as Y {}
// CHECK:STDOUT: %bound_method.loc7: <bound method> = bound_method %I.ref.loc7_12, %impl.elem0.loc7 [concrete = constants.%type.as.BitAndWith.impl.Op.bound]
// CHECK:STDOUT: %type.as.BitAndWith.impl.Op.call.loc7: init type = call %bound_method.loc7(%I.ref.loc7_12, %I.ref.loc7_16) [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7_18: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc7_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -507,6 +516,7 @@ impl C as Y {}
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c0c: type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.d99: type = facet_type <@I where %impl.elem0.c0c = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %.aaf: <witness> = impl_self_witness %empty_struct_type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @empty_struct_type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_struct_type, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -546,6 +556,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc6_23.2 = requirement_rewrite %impl.elem0.loc6_20.2, %.loc6_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc6: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc6_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: impl_decl @empty_struct_type.as.I.impl [concrete] {} {
// CHECK:STDOUT: %.loc8_7.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
// CHECK:STDOUT: %.loc8_7.2: type = converted %.loc8_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
@@ -567,6 +578,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc8_23.2 = requirement_rewrite %impl.elem0.loc8_20.2, %.loc8_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc8_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -628,6 +640,7 @@ impl C as Y {}
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c0c: type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.d99: type = facet_type <@I where %impl.elem0.c0c = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete]
// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete]
@@ -671,6 +684,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc7_22.2 = requirement_rewrite %impl.elem0.loc7_19.2, %.loc7_25.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc7, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple]
// CHECK:STDOUT: %.loc9_19: %empty_tuple.type = converted @__global_init.%.loc9, %empty_tuple [concrete = constants.%empty_tuple]
// CHECK:STDOUT: %.loc9_9.1: type = splice_block %impl.elem0 [concrete = constants.%empty_tuple.type] {
@@ -705,6 +719,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc11_22.2 = requirement_rewrite %impl.elem0.loc11_19.2, %.loc11_25.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc11, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -780,6 +795,7 @@ impl C as Y {}
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c0c: type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.d99: type = facet_type <@I where %impl.elem0.c0c = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete]
// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete]
@@ -823,6 +839,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc7_22.2 = requirement_rewrite %impl.elem0.loc7_19.2, %.loc7_25.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc7, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple]
// CHECK:STDOUT: %.loc9_22: %empty_tuple.type = converted @__global_init.%.loc9, %empty_tuple [concrete = constants.%empty_tuple]
// CHECK:STDOUT: %.loc9_16.1: type = splice_block %impl.elem0 [concrete = constants.%empty_tuple.type] {
@@ -859,6 +876,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc11_22.2 = requirement_rewrite %impl.elem0.loc11_19.2, %.loc11_25.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc11, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -924,6 +942,7 @@ impl C as Y {}
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
@@ -951,6 +970,7 @@ impl C as Y {}
// CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %I.ref.loc7: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc7, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: %.loc13_16.1: type = splice_block %impl.elem0 [concrete = <error>] {
// CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, %I.decl [concrete = constants.%I.type]
@@ -969,6 +989,7 @@ impl C as Y {}
// CHECK:STDOUT: %C.ref.loc22: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %I.ref.loc22: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc22, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -1158,6 +1179,7 @@ impl C as Y {}
// CHECK:STDOUT: %.b67: <witness> = impl_self_witness %.Self, @I, @I(%C) [symbolic_self]
// CHECK:STDOUT: %impl.elem0.f8c: type = impl_witness_access %.b67, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.52d: type = facet_type <@I, @I(%C) where %impl.elem0.f8c = %C> [concrete]
// CHECK:STDOUT: %.fd4: <witness> = impl_self_witness %D, @I, @I(%C) [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @D.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type.c9e = facet_value %D, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -1210,6 +1232,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc8_25.2 = requirement_rewrite %impl.elem0.loc8_22.2, %C.ref.loc8_27 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @D.as.I.impl.%D.ref.loc8, @I, @I(constants.%C) [concrete = constants.%.fd4]
// CHECK:STDOUT: %C.decl.loc10: type = class_decl @C [concrete = constants.%C] {} {}
// CHECK:STDOUT: impl_decl @D.as.I.impl [concrete] {} {
// CHECK:STDOUT: %D.ref.loc11: type = name_ref D, file.%D.decl [concrete = constants.%D]
@@ -1233,6 +1256,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc11_25.2 = requirement_rewrite %impl.elem0.loc11_22.2, %C.ref.loc11_27 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @D.as.I.impl.%D.ref.loc11, @I, @I(constants.%C) [concrete = constants.%.fd4]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @I(%U.loc3_14.2: type) {
@@ -1331,6 +1355,7 @@ impl C as Y {}
// CHECK:STDOUT: %D: type = class_type @D [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.393: <witness> = impl_self_witness %D, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @D.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self]
@@ -1372,6 +1397,7 @@ impl C as Y {}
// CHECK:STDOUT: %D.ref.loc5: type = name_ref D, file.%D.decl [concrete = constants.%D]
// CHECK:STDOUT: %I.ref.loc5: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: <witness> = impl_self_witness @D.as.I.impl.%D.ref.loc5, @I [concrete = constants.%.393]
// CHECK:STDOUT: %C.decl.loc6: %C.type = class_decl @C [concrete = constants.%C.generic] {
// CHECK:STDOUT: %T.patt.loc12: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1400,6 +1426,7 @@ impl C as Y {}
// CHECK:STDOUT: %D.ref.loc11: type = name_ref D, file.%D.decl [concrete = constants.%D]
// CHECK:STDOUT: %I.ref.loc11: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @D.as.I.impl.%D.ref.loc11, @I [concrete = constants.%.393]
// CHECK:STDOUT: %C.decl.loc12: %C.type = class_decl @C [concrete = constants.%C.generic] {
// CHECK:STDOUT: %T.patt.loc12: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1599,6 +1626,7 @@ impl C as Y {}
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c0c: type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.d99: type = facet_type <@I where %impl.elem0.c0c = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -1639,6 +1667,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc9_22.2 = requirement_rewrite %impl.elem0.loc9_19.2, %.loc9_25.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc9, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} {
// CHECK:STDOUT: %C.ref.loc18: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %I.ref.loc18: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
@@ -1659,6 +1688,7 @@ impl C as Y {}
// CHECK:STDOUT: %rewrite.loc18_22.2 = requirement_rewrite %impl.elem0.loc18_19.2, %.loc18_25.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc18, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -1733,6 +1763,7 @@ impl C as Y {}
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.65a: <witness> = impl_self_witness %C, @X [concrete]
// CHECK:STDOUT: %X.impl_witness: <witness> = impl_witness @C.as.X.impl.%X.impl_witness_table [concrete]
// CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete]
// CHECK:STDOUT: %Self.b43: %X.type = symbolic_binding Self, 0 [symbolic]
@@ -1750,6 +1781,7 @@ impl C as Y {}
// CHECK:STDOUT: %G.specific_fn: <specific function> = specific_function %G, @G(%X.facet) [concrete]
// CHECK:STDOUT: %Self.765: %Y.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %U.as_type [symbolic]
// CHECK:STDOUT: %.e2e: <witness> = impl_self_witness %C, @Y [concrete]
// CHECK:STDOUT: %Y.impl_witness: <witness> = impl_witness @C.as.Y.impl.%Y.impl_witness_table [concrete]
// CHECK:STDOUT: %Y.facet: %Y.type = facet_value %C, (%Y.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -1805,6 +1837,7 @@ impl C as Y {}
// CHECK:STDOUT: %C.ref.loc12: type = name_ref C, file.%C.decl.loc9 [concrete = constants.%C]
// CHECK:STDOUT: %X.ref.loc12: type = name_ref X, file.%X.decl.loc3 [concrete = constants.%X.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @C.as.X.impl.%C.ref.loc12, @X [concrete = constants.%.65a]
// CHECK:STDOUT: %Y.decl.loc14: type = interface_decl @Y [concrete = constants.%Y.type] {} {}
// CHECK:STDOUT: %X.decl.loc16: type = interface_decl @X [concrete = constants.%X.type] {} {}
// CHECK:STDOUT: %C.decl.loc23: type = class_decl @C [concrete = constants.%C] {} {}
@@ -1848,14 +1881,17 @@ impl C as Y {}
// CHECK:STDOUT: %C.ref.loc36: type = name_ref C, file.%C.decl.loc9 [concrete = constants.%C]
// CHECK:STDOUT: %Y.ref.loc36: type = name_ref Y, file.%Y.decl.loc14 [concrete = constants.%Y.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc36: <witness> = impl_self_witness @C.as.Y.impl.%C.ref.loc36, @Y [concrete = constants.%.e2e]
// CHECK:STDOUT: impl_decl @C.as.X.impl [concrete] {} {
// CHECK:STDOUT: %C.ref.loc37: type = name_ref C, file.%C.decl.loc9 [concrete = constants.%C]
// CHECK:STDOUT: %X.ref.loc37: type = name_ref X, file.%X.decl.loc3 [concrete = constants.%X.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc37: <witness> = impl_self_witness @C.as.X.impl.%C.ref.loc37, @X [concrete = constants.%.65a]
// CHECK:STDOUT: impl_decl @C.as.Y.impl [concrete] {} {
// CHECK:STDOUT: %C.ref.loc38: type = name_ref C, file.%C.decl.loc9 [concrete = constants.%C]
// CHECK:STDOUT: %Y.ref.loc38: type = name_ref Y, file.%Y.decl.loc14 [concrete = constants.%Y.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc38: <witness> = impl_self_witness @C.as.Y.impl.%C.ref.loc38, @Y [concrete = constants.%.e2e]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @X {
@@ -137,21 +137,25 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.1df: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T.dda: %I.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.b38: type = facet_access_type %T.dda [symbolic]
// CHECK:STDOUT: %.915: <witness> = impl_self_witness %T.as_type.b38, @Interface [symbolic]
// CHECK:STDOUT: %Interface.impl_witness.5b0: <witness> = impl_witness @T.as_type.as.Interface.impl.72f.%Interface.impl_witness_table, @T.as_type.as.Interface.impl.72f(%T.dda) [symbolic]
// CHECK:STDOUT: %pattern_type.2c5: type = pattern_type %J.type [concrete]
// CHECK:STDOUT: %T.patt.ac1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T.e40: %J.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.d90: type = facet_access_type %T.e40 [symbolic]
// CHECK:STDOUT: %.eab: <witness> = impl_self_witness %T.as_type.d90, @Interface [symbolic]
// CHECK:STDOUT: %Interface.impl_witness.614: <witness> = impl_witness @T.as_type.as.Interface.impl.24e.%Interface.impl_witness_table, @T.as_type.as.Interface.impl.24e(%T.e40) [symbolic]
// CHECK:STDOUT: %pattern_type.b64: type = pattern_type %K.type [concrete]
// CHECK:STDOUT: %T.patt.0ef: %pattern_type.b64 = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T.062: %K.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.1ea: type = facet_access_type %T.062 [symbolic]
// CHECK:STDOUT: %.2ae: <witness> = impl_self_witness %T.as_type.1ea, @Interface [symbolic]
// CHECK:STDOUT: %Interface.impl_witness.bda: <witness> = impl_witness @T.as_type.as.Interface.impl.b21.%Interface.impl_witness_table, @T.as_type.as.Interface.impl.b21(%T.062) [symbolic]
// CHECK:STDOUT: %pattern_type.25e: type = pattern_type %L.type [concrete]
// CHECK:STDOUT: %T.patt.b11: %pattern_type.25e = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T.709: %L.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type.56f: type = facet_access_type %T.709 [symbolic]
// CHECK:STDOUT: %.30d: <witness> = impl_self_witness %T.as_type.56f, @Interface [symbolic]
// CHECK:STDOUT: %Interface.impl_witness.9d3: <witness> = impl_witness @T.as_type.as.Interface.impl.2b4.%Interface.impl_witness_table, @T.as_type.as.Interface.impl.2b4(%T.709) [symbolic]
// CHECK:STDOUT: %Interface.facet.8e9: %Interface.type = facet_value %T.as_type.b38, (%Interface.impl_witness.5b0) [symbolic]
// CHECK:STDOUT: %Interface.facet.d46: %Interface.type = facet_value %T.as_type.d90, (%Interface.impl_witness.614) [symbolic]
@@ -194,6 +198,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc12_15.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T.dda)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @T.as_type.as.Interface.impl.72f.%.loc12_20, @Interface [symbolic = @T.as_type.as.Interface.impl.72f.%.loc12_34 (constants.%.915)]
// CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.24e [concrete] {
// CHECK:STDOUT: %T.patt.loc13_15.1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_15.2 (constants.%T.patt.ac1)]
// CHECK:STDOUT: } {
@@ -207,6 +212,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc13_15.1: %J.type = symbolic_binding T, 0 [symbolic = %T.loc13_15.2 (constants.%T.e40)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc13: <witness> = impl_self_witness @T.as_type.as.Interface.impl.24e.%.loc13_20, @Interface [symbolic = @T.as_type.as.Interface.impl.24e.%.loc13_34 (constants.%.eab)]
// CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.b21 [concrete] {
// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type.b64 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt.0ef)]
// CHECK:STDOUT: } {
@@ -220,6 +226,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc14_15.1: %K.type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T.062)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc14: <witness> = impl_self_witness @T.as_type.as.Interface.impl.b21.%.loc14_20, @Interface [symbolic = @T.as_type.as.Interface.impl.b21.%.loc14_34 (constants.%.2ae)]
// CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.2b4 [concrete] {
// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type.25e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt.b11)]
// CHECK:STDOUT: } {
@@ -233,6 +240,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc15_15.1: %L.type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T.709)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15: <witness> = impl_self_witness @T.as_type.as.Interface.impl.2b4.%.loc15_20, @Interface [symbolic = @T.as_type.as.Interface.impl.2b4.%.loc15_34 (constants.%.30d)]
// CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.72f [concrete] {
// CHECK:STDOUT: %T.patt.loc12_15.1: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt.1df)]
// CHECK:STDOUT: } {
@@ -246,6 +254,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc19: %I.type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T.dda)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19: <witness> = impl_self_witness @T.as_type.as.Interface.impl.72f.%.loc19_20, @Interface [symbolic = @T.as_type.as.Interface.impl.72f.%.loc12_34 (constants.%.915)]
// CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.24e [concrete] {
// CHECK:STDOUT: %T.patt.loc13_15.1: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_15.2 (constants.%T.patt.ac1)]
// CHECK:STDOUT: } {
@@ -259,6 +268,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc27: %J.type = symbolic_binding T, 0 [symbolic = %T.loc13_15.2 (constants.%T.e40)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc27: <witness> = impl_self_witness @T.as_type.as.Interface.impl.24e.%.loc27_20, @Interface [symbolic = @T.as_type.as.Interface.impl.24e.%.loc13_34 (constants.%.eab)]
// CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.b21 [concrete] {
// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type.b64 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt.0ef)]
// CHECK:STDOUT: } {
@@ -272,6 +282,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc35: %K.type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T.062)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc35: <witness> = impl_self_witness @T.as_type.as.Interface.impl.b21.%.loc35_20, @Interface [symbolic = @T.as_type.as.Interface.impl.b21.%.loc14_34 (constants.%.2ae)]
// CHECK:STDOUT: impl_decl @T.as_type.as.Interface.impl.2b4 [concrete] {
// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type.25e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt.b11)]
// CHECK:STDOUT: } {
@@ -285,6 +296,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc43: %L.type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T.709)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc43: <witness> = impl_self_witness @T.as_type.as.Interface.impl.2b4.%.loc43_20, @Interface [symbolic = @T.as_type.as.Interface.impl.2b4.%.loc15_34 (constants.%.30d)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Interface {
@@ -346,6 +358,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc12_15.2: %pattern_type.6cb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt.1df)]
// CHECK:STDOUT: %T.loc12_15.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T.dda)]
// CHECK:STDOUT: %T.as_type.loc12_20.2: type = facet_access_type %T.loc12_15.2 [symbolic = %T.as_type.loc12_20.2 (constants.%T.as_type.b38)]
// CHECK:STDOUT: %.loc12_34: <witness> = impl_self_witness %T.as_type.loc12_20.2, @Interface [symbolic = %.loc12_34 (constants.%.915)]
// CHECK:STDOUT: %Interface.impl_witness.loc12_34.2: <witness> = impl_witness %Interface.impl_witness_table, @T.as_type.as.Interface.impl.72f(%T.loc12_15.2) [symbolic = %Interface.impl_witness.loc12_34.2 (constants.%Interface.impl_witness.5b0)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -364,6 +377,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc13_15.2: %pattern_type.2c5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_15.2 (constants.%T.patt.ac1)]
// CHECK:STDOUT: %T.loc13_15.2: %J.type = symbolic_binding T, 0 [symbolic = %T.loc13_15.2 (constants.%T.e40)]
// CHECK:STDOUT: %T.as_type.loc13_20.2: type = facet_access_type %T.loc13_15.2 [symbolic = %T.as_type.loc13_20.2 (constants.%T.as_type.d90)]
// CHECK:STDOUT: %.loc13_34: <witness> = impl_self_witness %T.as_type.loc13_20.2, @Interface [symbolic = %.loc13_34 (constants.%.eab)]
// CHECK:STDOUT: %Interface.impl_witness.loc13_34.2: <witness> = impl_witness %Interface.impl_witness_table, @T.as_type.as.Interface.impl.24e(%T.loc13_15.2) [symbolic = %Interface.impl_witness.loc13_34.2 (constants.%Interface.impl_witness.614)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -382,6 +396,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc14_15.2: %pattern_type.b64 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt.0ef)]
// CHECK:STDOUT: %T.loc14_15.2: %K.type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T.062)]
// CHECK:STDOUT: %T.as_type.loc14_20.2: type = facet_access_type %T.loc14_15.2 [symbolic = %T.as_type.loc14_20.2 (constants.%T.as_type.1ea)]
// CHECK:STDOUT: %.loc14_34: <witness> = impl_self_witness %T.as_type.loc14_20.2, @Interface [symbolic = %.loc14_34 (constants.%.2ae)]
// CHECK:STDOUT: %Interface.impl_witness.loc14_34.2: <witness> = impl_witness %Interface.impl_witness_table, @T.as_type.as.Interface.impl.b21(%T.loc14_15.2) [symbolic = %Interface.impl_witness.loc14_34.2 (constants.%Interface.impl_witness.bda)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -400,6 +415,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type.25e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt.b11)]
// CHECK:STDOUT: %T.loc15_15.2: %L.type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T.709)]
// CHECK:STDOUT: %T.as_type.loc15_20.2: type = facet_access_type %T.loc15_15.2 [symbolic = %T.as_type.loc15_20.2 (constants.%T.as_type.56f)]
// CHECK:STDOUT: %.loc15_34: <witness> = impl_self_witness %T.as_type.loc15_20.2, @Interface [symbolic = %.loc15_34 (constants.%.30d)]
// CHECK:STDOUT: %Interface.impl_witness.loc15_34.2: <witness> = impl_witness %Interface.impl_witness_table, @T.as_type.as.Interface.impl.2b4(%T.loc15_15.2) [symbolic = %Interface.impl_witness.loc15_34.2 (constants.%Interface.impl_witness.9d3)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -438,6 +454,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc12_15.2 => constants.%T.patt.1df
// CHECK:STDOUT: %T.loc12_15.2 => constants.%T.dda
// CHECK:STDOUT: %T.as_type.loc12_20.2 => constants.%T.as_type.b38
// CHECK:STDOUT: %.loc12_34 => constants.%.915
// CHECK:STDOUT: %Interface.impl_witness.loc12_34.2 => constants.%Interface.impl_witness.5b0
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -445,6 +462,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc13_15.2 => constants.%T.patt.ac1
// CHECK:STDOUT: %T.loc13_15.2 => constants.%T.e40
// CHECK:STDOUT: %T.as_type.loc13_20.2 => constants.%T.as_type.d90
// CHECK:STDOUT: %.loc13_34 => constants.%.eab
// CHECK:STDOUT: %Interface.impl_witness.loc13_34.2 => constants.%Interface.impl_witness.614
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -452,6 +470,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc14_15.2 => constants.%T.patt.0ef
// CHECK:STDOUT: %T.loc14_15.2 => constants.%T.062
// CHECK:STDOUT: %T.as_type.loc14_20.2 => constants.%T.as_type.1ea
// CHECK:STDOUT: %.loc14_34 => constants.%.2ae
// CHECK:STDOUT: %Interface.impl_witness.loc14_34.2 => constants.%Interface.impl_witness.bda
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -459,6 +478,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt.b11
// CHECK:STDOUT: %T.loc15_15.2 => constants.%T.709
// CHECK:STDOUT: %T.as_type.loc15_20.2 => constants.%T.as_type.56f
// CHECK:STDOUT: %.loc15_34 => constants.%.30d
// CHECK:STDOUT: %Interface.impl_witness.loc15_34.2 => constants.%Interface.impl_witness.9d3
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -491,6 +511,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic]
// CHECK:STDOUT: %.989: <witness> = impl_self_witness %T.as_type, @J [symbolic]
// CHECK:STDOUT: %J.impl_witness: <witness> = impl_witness @T.as_type.as.J.impl.377648.1.%J.impl_witness_table, @T.as_type.as.J.impl.377648.1(%T) [symbolic]
// CHECK:STDOUT: %J.facet: %J.type = facet_value %T.as_type, (%J.impl_witness) [symbolic]
// CHECK:STDOUT: }
@@ -524,6 +545,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc7_15.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @T.as_type.as.J.impl.377648.1.%.loc7_20, @J [symbolic = @T.as_type.as.J.impl.377648.1.%.loc7_27 (constants.%.989)]
// CHECK:STDOUT: impl_decl @T.as_type.as.J.impl.377648.2 [concrete] {
// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -537,6 +559,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc15_15.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15: <witness> = impl_self_witness @T.as_type.as.J.impl.377648.2.%.loc15_20, @J [symbolic = @T.as_type.as.J.impl.377648.2.%.loc15_27 (constants.%.989)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -565,6 +588,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc7_15.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T)]
// CHECK:STDOUT: %T.as_type.loc7_20.2: type = facet_access_type %T.loc7_15.2 [symbolic = %T.as_type.loc7_20.2 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc7_27: <witness> = impl_self_witness %T.as_type.loc7_20.2, @J [symbolic = %.loc7_27 (constants.%.989)]
// CHECK:STDOUT: %J.impl_witness.loc7_27.2: <witness> = impl_witness %J.impl_witness_table, @T.as_type.as.J.impl.377648.1(%T.loc7_15.2) [symbolic = %J.impl_witness.loc7_27.2 (constants.%J.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -583,6 +607,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc15_15.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T)]
// CHECK:STDOUT: %T.as_type.loc15_20.2: type = facet_access_type %T.loc15_15.2 [symbolic = %T.as_type.loc15_20.2 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc15_27: <witness> = impl_self_witness %T.as_type.loc15_20.2, @J [symbolic = %.loc15_27 (constants.%.989)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
@@ -605,6 +630,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc7_15.2 => constants.%T
// CHECK:STDOUT: %T.as_type.loc7_20.2 => constants.%T.as_type
// CHECK:STDOUT: %.loc7_27 => constants.%.989
// CHECK:STDOUT: %J.impl_witness.loc7_27.2 => constants.%J.impl_witness
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -616,6 +642,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc15_15.2 => constants.%T
// CHECK:STDOUT: %T.as_type.loc15_20.2 => constants.%T.as_type
// CHECK:STDOUT: %.loc15_27 => constants.%.989
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_same_type_different_spelling.carbon
@@ -624,6 +651,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.1c7395.1: <witness> = impl_witness @C.as.I.impl.e103db.1.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet.c56855.1: %I.type = facet_value %C, (%I.impl_witness.1c7395.1) [concrete]
// CHECK:STDOUT: %tuple.type: type = tuple_type (type, type) [concrete]
@@ -653,6 +681,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @C.as.I.impl.e103db.1.%C.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: impl_decl @C.as.I.impl.e103db.2 [concrete] {} {
// CHECK:STDOUT: %C.ref.loc17_7: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %C.ref.loc17_10: type = name_ref C, file.%C.decl [concrete = constants.%C]
@@ -663,6 +692,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %tuple.elem0: type = tuple_access %.loc17_11.2, element0 [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc17: <witness> = impl_self_witness @C.as.I.impl.e103db.2.%tuple.elem0, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -718,6 +748,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %.917: <witness> = impl_self_witness %T, @I [symbolic]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @T.as.I.impl.812d8b.1.%I.impl_witness_table, @T.as.I.impl.812d8b.1(%T) [symbolic]
// CHECK:STDOUT: %T.as.I.impl.A.type: type = fn_type @T.as.I.impl.A, @T.as.I.impl.812d8b.1(%T) [symbolic]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
@@ -762,6 +793,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc4_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc4: <witness> = impl_self_witness @T.as.I.impl.812d8b.1.%T.ref, @I [symbolic = @T.as.I.impl.812d8b.1.%.loc4_30 (constants.%.917)]
// CHECK:STDOUT: impl_decl @T.as.I.impl.812d8b.2 [concrete] {
// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -773,6 +805,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc15_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.1 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15: <witness> = impl_self_witness @T.as.I.impl.812d8b.2.%T.ref, @I [symbolic = @T.as.I.impl.812d8b.2.%.loc15_30 (constants.%.917)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -789,6 +822,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: generic impl @T.as.I.impl.812d8b.1(%T.loc4_15.2: type) {
// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc4_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)]
// CHECK:STDOUT: %.loc4_30: <witness> = impl_self_witness %T.loc4_15.1, @I [symbolic = %.loc4_30 (constants.%.917)]
// CHECK:STDOUT: %I.impl_witness.loc4_30.2: <witness> = impl_witness %I.impl_witness_table, @T.as.I.impl.812d8b.1(%T.loc4_15.1) [symbolic = %I.impl_witness.loc4_30.2 (constants.%I.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -810,6 +844,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: generic impl @T.as.I.impl.812d8b.2(%T.loc15_15.2: type) {
// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc15_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.1 (constants.%T)]
// CHECK:STDOUT: %.loc15_30: <witness> = impl_self_witness %T.loc15_15.1, @I [symbolic = %.loc15_30 (constants.%.917)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as.I.impl.B.type: type = fn_type @T.as.I.impl.B, @T.as.I.impl.812d8b.2(%T.loc15_15.1) [symbolic = %T.as.I.impl.B.type (constants.%T.as.I.impl.B.type)]
@@ -905,6 +940,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: specific @T.as.I.impl.812d8b.1(constants.%T) {
// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc4_15.1 => constants.%T
// CHECK:STDOUT: %.loc4_30 => constants.%.917
// CHECK:STDOUT: %I.impl_witness.loc4_30.2 => constants.%I.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -921,6 +957,7 @@ impl forall [T: type] T as I {
// CHECK:STDOUT: specific @T.as.I.impl.812d8b.2(constants.%T) {
// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc15_15.1 => constants.%T
// CHECK:STDOUT: %.loc15_30 => constants.%.917
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as.I.impl.B.type => constants.%T.as.I.impl.B.type
+2
View File
@@ -36,6 +36,7 @@ class C {
// CHECK:STDOUT: %Simple.assoc_type: type = assoc_entity_type @Simple [concrete]
// CHECK:STDOUT: %assoc0.210: %Simple.assoc_type = assoc_entity element0, @Simple.WithSelf.%Simple.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.dd3: <witness> = impl_self_witness %C, @Simple [concrete]
// CHECK:STDOUT: %Simple.impl_witness: <witness> = impl_witness @C.as.Simple.impl.%Simple.impl_witness_table [concrete]
// CHECK:STDOUT: %C.as.Simple.impl.F.type: type = fn_type @C.as.Simple.impl.F [concrete]
// CHECK:STDOUT: %C.as.Simple.impl.F: %C.as.Simple.impl.F.type = struct_value () [concrete]
@@ -108,6 +109,7 @@ class C {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %Simple.ref: type = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc20: <witness> = impl_self_witness @C.as.Simple.impl.%Self.ref, @Simple [concrete = constants.%.dd3]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -106,6 +106,7 @@ impl () as I where .X = {.a = true, .b = (1, 2)} and .X = {.a = false, .b = (3,
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.b6e: %struct_type.a.b.486 = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.58a: type = facet_type <@I where %impl.elem0.b6e = %struct.247> [concrete]
// CHECK:STDOUT: %.2ef: <witness> = impl_self_witness %empty_tuple.type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @empty_tuple.type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_tuple.type, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -231,6 +232,7 @@ impl () as I where .X = {.a = true, .b = (1, 2)} and .X = {.a = false, .b = (3,
// CHECK:STDOUT: %rewrite.loc6_57.2 = requirement_rewrite %impl.elem0.subst.loc6_54.2, %.loc6_95.3 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc6: <witness> = impl_self_witness @empty_tuple.type.as.I.impl.%.loc6_7.2, @I [concrete = constants.%.2ef]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
+4
View File
@@ -34,6 +34,7 @@ impl forall [T: type] T as Simple {
// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %.2a3: <witness> = impl_self_witness %T, @Simple [symbolic]
// CHECK:STDOUT: %Simple.impl_witness: <witness> = impl_witness @T.as.Simple.impl.%Simple.impl_witness_table, @T.as.Simple.impl(%T) [symbolic]
// CHECK:STDOUT: %T.as.Simple.impl.F.type: type = fn_type @T.as.Simple.impl.F, @T.as.Simple.impl(%T) [symbolic]
// CHECK:STDOUT: %T.as.Simple.impl.F: %T.as.Simple.impl.F.type = struct_value () [symbolic]
@@ -58,6 +59,7 @@ impl forall [T: type] T as Simple {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc19_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc19_15.1 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19: <witness> = impl_self_witness @T.as.Simple.impl.%T.ref, @Simple [symbolic = @T.as.Simple.impl.%.loc19_35 (constants.%.2a3)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Simple {
@@ -79,6 +81,7 @@ impl forall [T: type] T as Simple {
// CHECK:STDOUT: generic impl @T.as.Simple.impl(%T.loc19_15.2: type) {
// CHECK:STDOUT: %T.patt.loc19_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc19_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc19_15.1 (constants.%T)]
// CHECK:STDOUT: %.loc19_35: <witness> = impl_self_witness %T.loc19_15.1, @Simple [symbolic = %.loc19_35 (constants.%.2a3)]
// CHECK:STDOUT: %Simple.impl_witness.loc19_35.2: <witness> = impl_witness %Simple.impl_witness_table, @T.as.Simple.impl(%T.loc19_15.1) [symbolic = %Simple.impl_witness.loc19_35.2 (constants.%Simple.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -122,6 +125,7 @@ impl forall [T: type] T as Simple {
// CHECK:STDOUT: specific @T.as.Simple.impl(constants.%T) {
// CHECK:STDOUT: %T.patt.loc19_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc19_15.1 => constants.%T
// CHECK:STDOUT: %.loc19_35 => constants.%.2a3
// CHECK:STDOUT: %Simple.impl_witness.loc19_35.2 => constants.%Simple.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
+4
View File
@@ -111,6 +111,7 @@ fn InstanceCallImportFail() {
// CHECK:STDOUT: %assoc0.e8a: %NonInstance.assoc_type = assoc_entity element0, @NonInstance.WithSelf.%NonInstance.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %empty_tuple.type} [concrete]
// CHECK:STDOUT: %.a1e: <witness> = impl_self_witness %struct_type.i, @NonInstance [concrete]
// CHECK:STDOUT: %NonInstance.impl_witness: <witness> = impl_witness @struct_type.i.as.NonInstance.impl.%NonInstance.impl_witness_table [concrete]
// CHECK:STDOUT: %struct_type.i.as.NonInstance.impl.F.type: type = fn_type @struct_type.i.as.NonInstance.impl.F [concrete]
// CHECK:STDOUT: %struct_type.i.as.NonInstance.impl.F: %struct_type.i.as.NonInstance.impl.F.type = struct_value () [concrete]
@@ -127,6 +128,7 @@ fn InstanceCallImportFail() {
// CHECK:STDOUT: %Instance.WithSelf.G.395: %Instance.WithSelf.G.type.f64 = struct_value () [symbolic]
// CHECK:STDOUT: %Instance.assoc_type: type = assoc_entity_type @Instance [concrete]
// CHECK:STDOUT: %assoc0.94f: %Instance.assoc_type = assoc_entity element0, @Instance.WithSelf.%Instance.WithSelf.G.decl [concrete]
// CHECK:STDOUT: %.327: <witness> = impl_self_witness %struct_type.i, @Instance [concrete]
// CHECK:STDOUT: %Instance.impl_witness: <witness> = impl_witness @struct_type.i.as.Instance.impl.%Instance.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.9b2: type = pattern_type %struct_type.i [concrete]
// CHECK:STDOUT: %self.param_patt.862: %pattern_type.9b2 = value_param_pattern [concrete]
@@ -159,6 +161,7 @@ fn InstanceCallImportFail() {
// CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %empty_tuple.type} [concrete = constants.%struct_type.i]
// CHECK:STDOUT: %NonInstance.ref: type = name_ref NonInstance, file.%NonInstance.decl [concrete = constants.%NonInstance.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @struct_type.i.as.NonInstance.impl.%struct_type.i, @NonInstance [concrete = constants.%.a1e]
// CHECK:STDOUT: %Instance.decl: type = interface_decl @Instance [concrete = constants.%Instance.type] {} {}
// CHECK:STDOUT: impl_decl @struct_type.i.as.Instance.impl [concrete] {} {
// CHECK:STDOUT: %.loc15_12.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
@@ -166,6 +169,7 @@ fn InstanceCallImportFail() {
// CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %empty_tuple.type} [concrete = constants.%struct_type.i]
// CHECK:STDOUT: %Instance.ref: type = name_ref Instance, file.%Instance.decl [concrete = constants.%Instance.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15: <witness> = impl_self_witness @struct_type.i.as.Instance.impl.%struct_type.i, @Instance [concrete = constants.%.327]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @NonInstance {
@@ -47,6 +47,7 @@ fn G(c: C) {
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %C.as.I.impl.F.type: type = fn_type @C.as.I.impl.F [concrete]
// CHECK:STDOUT: %C.as.I.impl.F: %C.as.I.impl.F.type = struct_value () [concrete]
@@ -98,6 +99,7 @@ fn G(c: C) {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @C.as.I.impl.%Self.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
+86
View File
@@ -339,6 +339,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %I.type.81d: type = facet_type <@I, @I(%empty_struct_type)> [concrete]
// CHECK:STDOUT: %.b5d: <witness> = impl_self_witness %C, @I, @I(%empty_struct_type) [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.47c: %I.type.81d = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %I.facet: %I.type.81d = facet_value %C, (%I.impl_witness) [concrete]
@@ -348,6 +349,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %Self.9f1: %J.type.5c8 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.9f1 [symbolic]
// CHECK:STDOUT: %J.type.80f: type = facet_type <@J, @J(%empty_struct_type)> [concrete]
// CHECK:STDOUT: %.cc7: <witness> = impl_self_witness %C, @J, @J(%empty_struct_type) [concrete]
// CHECK:STDOUT: %J.impl_witness: <witness> = impl_witness @C.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.043: %J.type.80f = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %complete_type.7da: <witness> = complete_type_witness %I.type.81d [concrete]
@@ -386,6 +388,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %.loc5_15: type = converted %.loc5_14, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(constants.%empty_struct_type)> [concrete = constants.%I.type.81d]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: <witness> = impl_self_witness @C.as.I.impl.%C.ref, @I, @I(constants.%empty_struct_type) [concrete = constants.%.b5d]
// CHECK:STDOUT: impl_decl @C.as.J.impl [concrete] {} {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %J.ref: %J.type.23c = name_ref J, imports.%Main.J [concrete = constants.%J.generic]
@@ -393,6 +396,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %.loc7_15: type = converted %.loc7_14, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %J.type: type = facet_type <@J, @J(constants.%empty_struct_type)> [concrete = constants.%J.type.80f]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @C.as.J.impl.%C.ref, @J, @J(constants.%empty_struct_type) [concrete = constants.%.cc7]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.2: type) [from "basic_import_generic_interface.carbon"] {
@@ -711,6 +715,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %I.type.81d: type = facet_type <@I, @I(%empty_struct_type)> [concrete]
// CHECK:STDOUT: %Self.47c: %I.type.81d = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %complete_type.7da: <witness> = complete_type_witness %I.type.81d [concrete]
// CHECK:STDOUT: %.b5d: <witness> = impl_self_witness %C, @I, @I(%empty_struct_type) [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.e1f642.2: %J.type.d682d6.2 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %I.facet: %I.type.81d = facet_value %C, (%I.impl_witness) [concrete]
@@ -746,6 +751,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %.loc5_15: type = converted %.loc5_14, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %J.type: type = facet_type <@J, @J(constants.%empty_struct_type)> [concrete = constants.%J.type.d682d6.2]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: <witness> = impl_self_witness @C.as.I.impl.%C.ref, @I, @I(constants.%empty_struct_type) [concrete = constants.%.b5d]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.3: type) [from "basic_import_generic_constraint.carbon"] {
@@ -901,11 +907,13 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete]
// CHECK:STDOUT: %I.type.3fe: type = facet_type <@I, @I(%T)> [symbolic]
// CHECK:STDOUT: %Self.191: %I.type.3fe = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %.ece: <witness> = impl_self_witness %C, @I, @I(%T) [symbolic]
// CHECK:STDOUT: %I.impl_witness.fb7: <witness> = impl_witness @C.as.I.impl.da9.%I.impl_witness_table, @C.as.I.impl.da9(%T) [symbolic]
// CHECK:STDOUT: %require_complete.45e: <witness> = require_complete_type %I.type.3fe [symbolic]
// CHECK:STDOUT: %I.facet.0de: %I.type.3fe = facet_value %C, (%I.impl_witness.fb7) [symbolic]
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic]
// CHECK:STDOUT: %I.type.a76: type = facet_type <@I, @I(%ptr)> [symbolic]
// CHECK:STDOUT: %.5ab: <witness> = impl_self_witness %C, @I, @I(%ptr) [symbolic]
// CHECK:STDOUT: %I.impl_witness.0d7: <witness> = impl_witness @C.as.I.impl.982.%I.impl_witness_table, @C.as.I.impl.982(%T) [symbolic]
// CHECK:STDOUT: %Self.0ef: %I.type.a76 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %require_complete.078: <witness> = require_complete_type %I.type.a76 [symbolic]
@@ -946,6 +954,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @C.as.I.impl.da9.%C.ref.loc8, @I, @I(constants.%T) [symbolic = @C.as.I.impl.da9.%.loc8_32 (constants.%.ece)]
// CHECK:STDOUT: impl_decl @C.as.I.impl.da9 [concrete] {
// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -959,6 +968,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc9: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @C.as.I.impl.da9.%C.ref.loc9, @I, @I(constants.%T) [symbolic = @C.as.I.impl.da9.%.loc8_32 (constants.%.ece)]
// CHECK:STDOUT: impl_decl @C.as.I.impl.982 [concrete] {
// CHECK:STDOUT: %T.patt.loc12_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -973,6 +983,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc12_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @C.as.I.impl.982.%C.ref, @I, @I(constants.%ptr) [symbolic = @C.as.I.impl.982.%.loc12_34 (constants.%.5ab)]
// CHECK:STDOUT: %N.decl: %N.type.b76 = constraint_decl @N [concrete = constants.%empty_struct] {
// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1054,6 +1065,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)]
// CHECK:STDOUT: %I.type.loc8_31.2: type = facet_type <@I, @I(%T.loc8_15.2)> [symbolic = %I.type.loc8_31.2 (constants.%I.type.3fe)]
// CHECK:STDOUT: %.loc8_32: <witness> = impl_self_witness constants.%C, @I, @I(%T.loc8_15.2) [symbolic = %.loc8_32 (constants.%.ece)]
// CHECK:STDOUT: %I.impl_witness.loc8_32.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl.da9(%T.loc8_15.2) [symbolic = %I.impl_witness.loc8_32.2 (constants.%I.impl_witness.fb7)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1074,6 +1086,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc12_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.2 (constants.%T)]
// CHECK:STDOUT: %ptr.loc12_31.2: type = ptr_type %T.loc12_15.2 [symbolic = %ptr.loc12_31.2 (constants.%ptr)]
// CHECK:STDOUT: %I.type.loc12_32.2: type = facet_type <@I, @I(%ptr.loc12_31.2)> [symbolic = %I.type.loc12_32.2 (constants.%I.type.a76)]
// CHECK:STDOUT: %.loc12_34: <witness> = impl_self_witness constants.%C, @I, @I(%ptr.loc12_31.2) [symbolic = %.loc12_34 (constants.%.5ab)]
// CHECK:STDOUT: %I.impl_witness.loc12_34.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl.982(%T.loc12_15.2) [symbolic = %I.impl_witness.loc12_34.2 (constants.%I.impl_witness.0d7)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1114,6 +1127,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc8_15.2 => constants.%T
// CHECK:STDOUT: %I.type.loc8_31.2 => constants.%I.type.3fe
// CHECK:STDOUT: %.loc8_32 => constants.%.ece
// CHECK:STDOUT: %I.impl_witness.loc8_32.2 => constants.%I.impl_witness.fb7
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -1135,6 +1149,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc12_15.2 => constants.%T
// CHECK:STDOUT: %ptr.loc12_31.2 => constants.%ptr
// CHECK:STDOUT: %I.type.loc12_32.2 => constants.%I.type.a76
// CHECK:STDOUT: %.loc12_34 => constants.%.5ab
// CHECK:STDOUT: %I.impl_witness.loc12_34.2 => constants.%I.impl_witness.0d7
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -1174,9 +1189,11 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.ece: <witness> = impl_self_witness %C, @I, @I(%T) [symbolic]
// CHECK:STDOUT: %I.impl_witness.17f: <witness> = impl_witness imports.%I.impl_witness_table.c49, @C.as.I.impl.119(%T) [symbolic]
// CHECK:STDOUT: %require_complete.45e: <witness> = require_complete_type %I.type.3fe [symbolic]
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic]
// CHECK:STDOUT: %.5ab: <witness> = impl_self_witness %C, @I, @I(%ptr) [symbolic]
// CHECK:STDOUT: %I.type.a76: type = facet_type <@I, @I(%ptr)> [symbolic]
// CHECK:STDOUT: %Self.74c: %I.type.a76 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %I.impl_witness.b8e: <witness> = impl_witness imports.%I.impl_witness_table.78a, @C.as.I.impl.238(%T) [symbolic]
@@ -1242,6 +1259,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @C.as.I.impl.da9cee.1.%C.ref, @I, @I(constants.%T) [symbolic = @C.as.I.impl.da9cee.1.%.loc8_32 (constants.%.ece)]
// CHECK:STDOUT: impl_decl @C.as.I.impl.da9cee.2 [concrete] {
// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1255,6 +1273,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc14_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc14: <witness> = impl_self_witness @C.as.I.impl.da9cee.2.%C.ref, @I, @I(constants.%T) [symbolic = @C.as.I.impl.da9cee.2.%.loc14_33 (constants.%.ece)]
// CHECK:STDOUT: impl_decl @C.as.I.impl.982b7a.1 [concrete] {
// CHECK:STDOUT: %T.patt.loc20_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1269,6 +1288,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc20_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc20_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc20: <witness> = impl_self_witness @C.as.I.impl.982b7a.1.%C.ref, @I, @I(constants.%ptr) [symbolic = @C.as.I.impl.982b7a.1.%.loc20_33 (constants.%.5ab)]
// CHECK:STDOUT: impl_decl @C.as.I.impl.982b7a.2 [concrete] {
// CHECK:STDOUT: %T.patt.loc26_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1283,6 +1303,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc26_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc26_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc26: <witness> = impl_self_witness @C.as.I.impl.982b7a.2.%C.ref, @I, @I(constants.%ptr) [symbolic = @C.as.I.impl.982b7a.2.%.loc26_34 (constants.%.5ab)]
// CHECK:STDOUT: impl_decl @C.as.I.impl.042f52.1 [concrete] {
// CHECK:STDOUT: %T.patt.loc32_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1296,6 +1317,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc32_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc32_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc32: <witness> = impl_self_witness @C.as.I.impl.042f52.1.%C.ref, @I, @I(constants.%T) [symbolic = @C.as.I.impl.042f52.1.%.loc32_32 (constants.%.ece)]
// CHECK:STDOUT: impl_decl @C.as.I.impl.042f52.2 [concrete] {
// CHECK:STDOUT: %T.patt.loc37_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc37_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1310,6 +1332,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc37_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc37_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc37: <witness> = impl_self_witness @C.as.I.impl.042f52.2.%C.ref, @I, @I(constants.%ptr) [symbolic = @C.as.I.impl.042f52.2.%.loc37_33 (constants.%.5ab)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.2: type) [from "import_generic.carbon"] {
@@ -1361,6 +1384,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.3fe)]
// CHECK:STDOUT: %.1: <witness> = impl_self_witness constants.%C, @I, @I(%T) [symbolic = %.1 (constants.%.ece)]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness imports.%I.impl_witness_table.c49, @C.as.I.impl.119(%T) [symbolic = %I.impl_witness (constants.%I.impl_witness.17f)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1378,6 +1402,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic = %ptr (constants.%ptr)]
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%ptr)> [symbolic = %I.type (constants.%I.type.a76)]
// CHECK:STDOUT: %.1: <witness> = impl_self_witness constants.%C, @I, @I(%ptr) [symbolic = %.1 (constants.%.5ab)]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness imports.%I.impl_witness_table.78a, @C.as.I.impl.238(%T) [symbolic = %I.impl_witness (constants.%I.impl_witness.b8e)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1394,6 +1419,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)]
// CHECK:STDOUT: %I.type.loc8_31.2: type = facet_type <@I, @I(%T.loc8_15.2)> [symbolic = %I.type.loc8_31.2 (constants.%I.type.3fe)]
// CHECK:STDOUT: %.loc8_32: <witness> = impl_self_witness constants.%C, @I, @I(%T.loc8_15.2) [symbolic = %.loc8_32 (constants.%.ece)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %C.ref as %I.type.loc8_31.1;
// CHECK:STDOUT: }
@@ -1402,6 +1428,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc14_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc14_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T)]
// CHECK:STDOUT: %I.type.loc14_31.2: type = facet_type <@I, @I(%T.loc14_15.2)> [symbolic = %I.type.loc14_31.2 (constants.%I.type.3fe)]
// CHECK:STDOUT: %.loc14_33: <witness> = impl_self_witness constants.%C, @I, @I(%T.loc14_15.2) [symbolic = %.loc14_33 (constants.%.ece)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
@@ -1417,6 +1444,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc20_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc20_15.2 (constants.%T)]
// CHECK:STDOUT: %ptr.loc20_31.2: type = ptr_type %T.loc20_15.2 [symbolic = %ptr.loc20_31.2 (constants.%ptr)]
// CHECK:STDOUT: %I.type.loc20_32.2: type = facet_type <@I, @I(%ptr.loc20_31.2)> [symbolic = %I.type.loc20_32.2 (constants.%I.type.a76)]
// CHECK:STDOUT: %.loc20_33: <witness> = impl_self_witness constants.%C, @I, @I(%ptr.loc20_31.2) [symbolic = %.loc20_33 (constants.%.5ab)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %C.ref as %I.type.loc20_32.1;
// CHECK:STDOUT: }
@@ -1426,6 +1454,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc26_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc26_15.2 (constants.%T)]
// CHECK:STDOUT: %ptr.loc26_31.2: type = ptr_type %T.loc26_15.2 [symbolic = %ptr.loc26_31.2 (constants.%ptr)]
// CHECK:STDOUT: %I.type.loc26_32.2: type = facet_type <@I, @I(%ptr.loc26_31.2)> [symbolic = %I.type.loc26_32.2 (constants.%I.type.a76)]
// CHECK:STDOUT: %.loc26_34: <witness> = impl_self_witness constants.%C, @I, @I(%ptr.loc26_31.2) [symbolic = %.loc26_34 (constants.%.5ab)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
@@ -1440,6 +1469,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc32_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc32_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc32_15.2 (constants.%T)]
// CHECK:STDOUT: %N.type.loc32_31.2: type = facet_type <@N, @N(%T.loc32_15.2)> [symbolic = %N.type.loc32_31.2 (constants.%N.type.d682d6.1)]
// CHECK:STDOUT: %.loc32_32: <witness> = impl_self_witness constants.%C, @I, @I(%T.loc32_15.2) [symbolic = %.loc32_32 (constants.%.ece)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %C.ref as %N.type.loc32_31.1;
// CHECK:STDOUT: }
@@ -1449,6 +1479,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc37_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc37_15.2 (constants.%T)]
// CHECK:STDOUT: %ptr.loc37_31.2: type = ptr_type %T.loc37_15.2 [symbolic = %ptr.loc37_31.2 (constants.%ptr)]
// CHECK:STDOUT: %N.type.loc37_32.2: type = facet_type <@N, @N(%ptr.loc37_31.2)> [symbolic = %N.type.loc37_32.2 (constants.%N.type.d682d6.2)]
// CHECK:STDOUT: %.loc37_33: <witness> = impl_self_witness constants.%C, @I, @I(%ptr.loc37_31.2) [symbolic = %.loc37_33 (constants.%.5ab)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %C.ref as %N.type.loc37_32.1;
// CHECK:STDOUT: }
@@ -1477,6 +1508,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt => constants.%T.patt
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %I.type => constants.%I.type.3fe
// CHECK:STDOUT: %.1 => constants.%.ece
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.17f
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -1494,6 +1526,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %ptr => constants.%ptr
// CHECK:STDOUT: %I.type => constants.%I.type.a76
// CHECK:STDOUT: %.1 => constants.%.5ab
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.b8e
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -1501,12 +1534,14 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc8_15.2 => constants.%T
// CHECK:STDOUT: %I.type.loc8_31.2 => constants.%I.type.3fe
// CHECK:STDOUT: %.loc8_32 => constants.%.ece
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @C.as.I.impl.da9cee.2(constants.%T) {
// CHECK:STDOUT: %T.patt.loc14_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc14_15.2 => constants.%T
// CHECK:STDOUT: %I.type.loc14_31.2 => constants.%I.type.3fe
// CHECK:STDOUT: %.loc14_33 => constants.%.ece
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @C.as.I.impl.982b7a.1(constants.%T) {
@@ -1514,6 +1549,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc20_15.2 => constants.%T
// CHECK:STDOUT: %ptr.loc20_31.2 => constants.%ptr
// CHECK:STDOUT: %I.type.loc20_32.2 => constants.%I.type.a76
// CHECK:STDOUT: %.loc20_33 => constants.%.5ab
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @C.as.I.impl.982b7a.2(constants.%T) {
@@ -1521,6 +1557,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc26_15.2 => constants.%T
// CHECK:STDOUT: %ptr.loc26_31.2 => constants.%ptr
// CHECK:STDOUT: %I.type.loc26_32.2 => constants.%I.type.a76
// CHECK:STDOUT: %.loc26_34 => constants.%.5ab
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @N(constants.%T) {
@@ -1557,6 +1594,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc32_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc32_15.2 => constants.%T
// CHECK:STDOUT: %N.type.loc32_31.2 => constants.%N.type.d682d6.1
// CHECK:STDOUT: %.loc32_32 => constants.%.ece
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @N(constants.%ptr) {
@@ -1584,6 +1622,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc37_15.2 => constants.%T
// CHECK:STDOUT: %ptr.loc37_31.2 => constants.%ptr
// CHECK:STDOUT: %N.type.loc37_32.2 => constants.%N.type.d682d6.2
// CHECK:STDOUT: %.loc37_33 => constants.%.5ab
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- import_generic_with_different_specific.carbon
@@ -1601,6 +1640,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete]
// CHECK:STDOUT: %I.type.3fe: type = facet_type <@I, @I(%T)> [symbolic]
// CHECK:STDOUT: %Self.191: %I.type.3fe = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %.ece: <witness> = impl_self_witness %C, @I, @I(%T) [symbolic]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%T) [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %I.type.3fe [symbolic]
// CHECK:STDOUT: %I.facet: %I.type.3fe = facet_value %C, (%I.impl_witness) [symbolic]
@@ -1640,6 +1680,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @C.as.I.impl.%C.ref, @I, @I(constants.%T) [symbolic = @C.as.I.impl.%.loc7_33 (constants.%.ece)]
// CHECK:STDOUT: %N.decl: %N.type.b76 = constraint_decl @N [concrete = constants.%empty_struct] {
// CHECK:STDOUT: %T.patt.loc9_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1721,6 +1762,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.2 (constants.%T)]
// CHECK:STDOUT: %I.type.loc7_31.2: type = facet_type <@I, @I(%T.loc7_15.2)> [symbolic = %I.type.loc7_31.2 (constants.%I.type.3fe)]
// CHECK:STDOUT: %.loc7_33: <witness> = impl_self_witness constants.%C, @I, @I(%T.loc7_15.2) [symbolic = %.loc7_33 (constants.%.ece)]
// CHECK:STDOUT: %I.impl_witness.loc7_33.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc7_15.2) [symbolic = %I.impl_witness.loc7_33.2 (constants.%I.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1761,6 +1803,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc7_15.2 => constants.%T
// CHECK:STDOUT: %I.type.loc7_31.2 => constants.%I.type.3fe
// CHECK:STDOUT: %.loc7_33 => constants.%.ece
// CHECK:STDOUT: %I.impl_witness.loc7_33.2 => constants.%I.impl_witness
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -1796,12 +1839,14 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.ece: <witness> = impl_self_witness %C, @I, @I(%T) [symbolic]
// CHECK:STDOUT: %I.impl_witness.17f: <witness> = impl_witness imports.%I.impl_witness_table, @C.as.I.impl.119(%T) [symbolic]
// CHECK:STDOUT: %require_complete.45e: <witness> = require_complete_type %I.type.3fe [symbolic]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic]
// CHECK:STDOUT: %I.type.a76: type = facet_type <@I, @I(%ptr.e8f)> [symbolic]
// CHECK:STDOUT: %.5ab: <witness> = impl_self_witness %C, @I, @I(%ptr.e8f) [symbolic]
// CHECK:STDOUT: %I.impl_witness.0d7: <witness> = impl_witness @C.as.I.impl.982.%I.impl_witness_table, @C.as.I.impl.982(%T) [symbolic]
// CHECK:STDOUT: %Self.74c: %I.type.a76 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %require_complete.078: <witness> = require_complete_type %I.type.a76 [symbolic]
@@ -1816,6 +1861,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %C.type.facet: %type = facet_value %C, () [concrete]
// CHECK:STDOUT: %I.type.0a0: type = facet_type <@I, @I(%ptr.125)> [symbolic]
// CHECK:STDOUT: %require_complete.6fb: <witness> = require_complete_type %I.type.0a0 [symbolic]
// CHECK:STDOUT: %.d9e: <witness> = impl_self_witness %C, @I, @I(%ptr.125) [symbolic]
// CHECK:STDOUT: %I.impl_witness.b48: <witness> = impl_witness @C.as.I.impl.042.%I.impl_witness_table, @C.as.I.impl.042(%T) [symbolic]
// CHECK:STDOUT: %Self.e1f642.2: %N.type.d682d6.2 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %require_complete.533: <witness> = require_complete_type %N.type.d682d6.2 [symbolic]
@@ -1867,6 +1913,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc5_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: <witness> = impl_self_witness @C.as.I.impl.982.%C.ref, @I, @I(constants.%ptr.e8f) [symbolic = @C.as.I.impl.982.%.loc5_34 (constants.%.5ab)]
// CHECK:STDOUT: impl_decl @C.as.I.impl.042 [concrete] {
// CHECK:STDOUT: %T.patt.loc6_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -1882,6 +1929,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc6_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc6: <witness> = impl_self_witness @C.as.I.impl.042.%C.ref, @I, @I(constants.%ptr.125) [symbolic = @C.as.I.impl.042.%.loc6_35 (constants.%.d9e)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.b3bc94.2: type) [from "import_generic_with_different_specific.carbon"] {
@@ -1933,6 +1981,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.3fe)]
// CHECK:STDOUT: %.1: <witness> = impl_self_witness constants.%C, @I, @I(%T) [symbolic = %.1 (constants.%.ece)]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness imports.%I.impl_witness_table, @C.as.I.impl.119(%T) [symbolic = %I.impl_witness (constants.%I.impl_witness.17f)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1950,6 +1999,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc5_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_15.2 (constants.%T)]
// CHECK:STDOUT: %ptr.loc5_31.2: type = ptr_type %T.loc5_15.2 [symbolic = %ptr.loc5_31.2 (constants.%ptr.e8f)]
// CHECK:STDOUT: %I.type.loc5_32.2: type = facet_type <@I, @I(%ptr.loc5_31.2)> [symbolic = %I.type.loc5_32.2 (constants.%I.type.a76)]
// CHECK:STDOUT: %.loc5_34: <witness> = impl_self_witness constants.%C, @I, @I(%ptr.loc5_31.2) [symbolic = %.loc5_34 (constants.%.5ab)]
// CHECK:STDOUT: %I.impl_witness.loc5_34.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl.982(%T.loc5_15.2) [symbolic = %I.impl_witness.loc5_34.2 (constants.%I.impl_witness.0d7)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1971,6 +2021,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %ptr.loc6_31.2: type = ptr_type %T.loc6_15.2 [symbolic = %ptr.loc6_31.2 (constants.%ptr.e8f)]
// CHECK:STDOUT: %ptr.loc6_32.2: type = ptr_type %ptr.loc6_31.2 [symbolic = %ptr.loc6_32.2 (constants.%ptr.125)]
// CHECK:STDOUT: %N.type.loc6_33.2: type = facet_type <@N, @N(%ptr.loc6_32.2)> [symbolic = %N.type.loc6_33.2 (constants.%N.type.d682d6.2)]
// CHECK:STDOUT: %.loc6_35: <witness> = impl_self_witness constants.%C, @I, @I(%ptr.loc6_32.2) [symbolic = %.loc6_35 (constants.%.d9e)]
// CHECK:STDOUT: %I.impl_witness.loc6_35.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl.042(%T.loc6_15.2) [symbolic = %I.impl_witness.loc6_35.2 (constants.%I.impl_witness.b48)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -2010,6 +2061,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt => constants.%T.patt
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %I.type => constants.%I.type.3fe
// CHECK:STDOUT: %.1 => constants.%.ece
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.17f
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2027,6 +2079,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc5_15.2 => constants.%T
// CHECK:STDOUT: %ptr.loc5_31.2 => constants.%ptr.e8f
// CHECK:STDOUT: %I.type.loc5_32.2 => constants.%I.type.a76
// CHECK:STDOUT: %.loc5_34 => constants.%.5ab
// CHECK:STDOUT: %I.impl_witness.loc5_34.2 => constants.%I.impl_witness.0d7
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2088,6 +2141,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %ptr.loc6_31.2 => constants.%ptr.e8f
// CHECK:STDOUT: %ptr.loc6_32.2 => constants.%ptr.125
// CHECK:STDOUT: %N.type.loc6_33.2 => constants.%N.type.d682d6.2
// CHECK:STDOUT: %.loc6_35 => constants.%.d9e
// CHECK:STDOUT: %I.impl_witness.loc6_35.2 => constants.%I.impl_witness.b48
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2122,9 +2176,11 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %N.type.d68: type = facet_type <@N, @N(%T)> [symbolic]
// CHECK:STDOUT: %Self.22b: %N.type.d68 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.22b [symbolic]
// CHECK:STDOUT: %.1a5: <witness> = impl_self_witness %D, @J, @J(%T) [symbolic]
// CHECK:STDOUT: %J.impl_witness.7d7: <witness> = impl_witness @D.as.J.impl.5a5.%J.impl_witness_table, @D.as.J.impl.5a5(%T) [symbolic]
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic]
// CHECK:STDOUT: %J.type.c71: type = facet_type <@J, @J(%ptr)> [symbolic]
// CHECK:STDOUT: %.7a3: <witness> = impl_self_witness %D, @J, @J(%ptr) [symbolic]
// CHECK:STDOUT: %J.impl_witness.4af: <witness> = impl_witness @D.as.J.impl.101.%J.impl_witness_table, @D.as.J.impl.101(%T) [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2166,6 +2222,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc15_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15: <witness> = impl_self_witness @D.as.J.impl.5a5.%D.ref, @J, @J(constants.%T) [symbolic = @D.as.J.impl.5a5.%.loc15_32 (constants.%.1a5)]
// CHECK:STDOUT: impl_decl @D.as.J.impl.101 [concrete] {
// CHECK:STDOUT: %T.patt.loc21_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -2180,6 +2237,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc21_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc21_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc21: <witness> = impl_self_witness @D.as.J.impl.101.%D.ref, @J, @J(constants.%ptr) [symbolic = @D.as.J.impl.101.%.loc21_33 (constants.%.7a3)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @J(%T.loc5_14.2: type) {
@@ -2252,6 +2310,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc15_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.2 (constants.%T)]
// CHECK:STDOUT: %J.type.loc15_31.2: type = facet_type <@J, @J(%T.loc15_15.2)> [symbolic = %J.type.loc15_31.2 (constants.%J.type.5c8)]
// CHECK:STDOUT: %.loc15_32: <witness> = impl_self_witness constants.%D, @J, @J(%T.loc15_15.2) [symbolic = %.loc15_32 (constants.%.1a5)]
// CHECK:STDOUT: %J.impl_witness.loc15_32.2: <witness> = impl_witness %J.impl_witness_table, @D.as.J.impl.5a5(%T.loc15_15.2) [symbolic = %J.impl_witness.loc15_32.2 (constants.%J.impl_witness.7d7)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %D.ref as %J.type.loc15_31.1;
@@ -2262,6 +2321,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc21_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc21_15.2 (constants.%T)]
// CHECK:STDOUT: %ptr.loc21_31.2: type = ptr_type %T.loc21_15.2 [symbolic = %ptr.loc21_31.2 (constants.%ptr)]
// CHECK:STDOUT: %J.type.loc21_32.2: type = facet_type <@J, @J(%ptr.loc21_31.2)> [symbolic = %J.type.loc21_32.2 (constants.%J.type.c71)]
// CHECK:STDOUT: %.loc21_33: <witness> = impl_self_witness constants.%D, @J, @J(%ptr.loc21_31.2) [symbolic = %.loc21_33 (constants.%.7a3)]
// CHECK:STDOUT: %J.impl_witness.loc21_33.2: <witness> = impl_witness %J.impl_witness_table, @D.as.J.impl.101(%T.loc21_15.2) [symbolic = %J.impl_witness.loc21_33.2 (constants.%J.impl_witness.4af)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %D.ref as %J.type.loc21_32.1;
@@ -2307,6 +2367,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc15_15.2 => constants.%T
// CHECK:STDOUT: %J.type.loc15_31.2 => constants.%J.type.5c8
// CHECK:STDOUT: %.loc15_32 => constants.%.1a5
// CHECK:STDOUT: %J.impl_witness.loc15_32.2 => constants.%J.impl_witness.7d7
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2320,6 +2381,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc21_15.2 => constants.%T
// CHECK:STDOUT: %ptr.loc21_31.2 => constants.%ptr
// CHECK:STDOUT: %J.type.loc21_32.2 => constants.%J.type.c71
// CHECK:STDOUT: %.loc21_33 => constants.%.7a3
// CHECK:STDOUT: %J.impl_witness.loc21_33.2 => constants.%J.impl_witness.4af
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2336,8 +2398,10 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %D: type = class_type @D [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.1a5: <witness> = impl_self_witness %D, @J, @J(%T) [symbolic]
// CHECK:STDOUT: %J.impl_witness.699: <witness> = impl_witness imports.%J.impl_witness_table.a64, @D.as.J.impl.bdb(%T) [symbolic]
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic]
// CHECK:STDOUT: %.7a3: <witness> = impl_self_witness %D, @J, @J(%ptr) [symbolic]
// CHECK:STDOUT: %J.type.c71: type = facet_type <@J, @J(%ptr)> [symbolic]
// CHECK:STDOUT: %J.impl_witness.73b: <witness> = impl_witness imports.%J.impl_witness_table.93d, @D.as.J.impl.fa6(%T) [symbolic]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
@@ -2399,6 +2463,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @D.as.J.impl.5a5643.1.%D.ref, @J, @J(constants.%T) [symbolic = @D.as.J.impl.5a5643.1.%.loc8_32 (constants.%.1a5)]
// CHECK:STDOUT: impl_decl @D.as.J.impl.5a5643.2 [concrete] {
// CHECK:STDOUT: %T.patt.loc14_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -2412,6 +2477,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc14_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc14: <witness> = impl_self_witness @D.as.J.impl.5a5643.2.%D.ref, @J, @J(constants.%T) [symbolic = @D.as.J.impl.5a5643.2.%.loc14_33 (constants.%.1a5)]
// CHECK:STDOUT: impl_decl @D.as.J.impl.1010f3.1 [concrete] {
// CHECK:STDOUT: %T.patt.loc20_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -2426,6 +2492,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc20_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc20_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc20: <witness> = impl_self_witness @D.as.J.impl.1010f3.1.%D.ref, @J, @J(constants.%ptr) [symbolic = @D.as.J.impl.1010f3.1.%.loc20_33 (constants.%.7a3)]
// CHECK:STDOUT: impl_decl @D.as.J.impl.1010f3.2 [concrete] {
// CHECK:STDOUT: %T.patt.loc26_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -2440,6 +2507,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc26_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc26_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc26: <witness> = impl_self_witness @D.as.J.impl.1010f3.2.%D.ref, @J, @J(constants.%ptr) [symbolic = @D.as.J.impl.1010f3.2.%.loc26_34 (constants.%.7a3)]
// CHECK:STDOUT: impl_decl @D.as.J.impl.d69d6f.1 [concrete] {
// CHECK:STDOUT: %T.patt.loc32_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -2453,6 +2521,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc32_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc32_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc32: <witness> = impl_self_witness @D.as.J.impl.d69d6f.1.%D.ref, @J, @J(constants.%T) [symbolic = @D.as.J.impl.d69d6f.1.%.loc32_33 (constants.%.1a5)]
// CHECK:STDOUT: impl_decl @D.as.J.impl.d69d6f.2 [concrete] {
// CHECK:STDOUT: %T.patt.loc38_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc38_15.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
@@ -2467,6 +2536,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc38_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc38_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc38: <witness> = impl_self_witness @D.as.J.impl.d69d6f.2.%D.ref, @J, @J(constants.%ptr) [symbolic = @D.as.J.impl.d69d6f.2.%.loc38_34 (constants.%.7a3)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @J(imports.%Main.import_ref.b3bc94.2: type) [from "fail_import_generic_decl.carbon"] {
@@ -2518,6 +2588,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%T)> [symbolic = %J.type (constants.%J.type.5c8)]
// CHECK:STDOUT: %.1: <witness> = impl_self_witness constants.%D, @J, @J(%T) [symbolic = %.1 (constants.%.1a5)]
// CHECK:STDOUT: %J.impl_witness: <witness> = impl_witness imports.%J.impl_witness_table.a64, @D.as.J.impl.bdb(%T) [symbolic = %J.impl_witness (constants.%J.impl_witness.699)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: imports.%Main.import_ref.2e2cf0.1 as imports.%Main.import_ref.1936e1.1;
@@ -2528,6 +2599,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic = %ptr (constants.%ptr)]
// CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%ptr)> [symbolic = %J.type (constants.%J.type.c71)]
// CHECK:STDOUT: %.1: <witness> = impl_self_witness constants.%D, @J, @J(%ptr) [symbolic = %.1 (constants.%.7a3)]
// CHECK:STDOUT: %J.impl_witness: <witness> = impl_witness imports.%J.impl_witness_table.93d, @D.as.J.impl.fa6(%T) [symbolic = %J.impl_witness (constants.%J.impl_witness.73b)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: imports.%Main.import_ref.2e2cf0.2 as imports.%Main.import_ref.5a0;
@@ -2537,6 +2609,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.2 (constants.%T)]
// CHECK:STDOUT: %J.type.loc8_31.2: type = facet_type <@J, @J(%T.loc8_15.2)> [symbolic = %J.type.loc8_31.2 (constants.%J.type.5c8)]
// CHECK:STDOUT: %.loc8_32: <witness> = impl_self_witness constants.%D, @J, @J(%T.loc8_15.2) [symbolic = %.loc8_32 (constants.%.1a5)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %D.ref as %J.type.loc8_31.1;
// CHECK:STDOUT: }
@@ -2545,6 +2618,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc14_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc14_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc14_15.2 (constants.%T)]
// CHECK:STDOUT: %J.type.loc14_31.2: type = facet_type <@J, @J(%T.loc14_15.2)> [symbolic = %J.type.loc14_31.2 (constants.%J.type.5c8)]
// CHECK:STDOUT: %.loc14_33: <witness> = impl_self_witness constants.%D, @J, @J(%T.loc14_15.2) [symbolic = %.loc14_33 (constants.%.1a5)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
@@ -2560,6 +2634,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc20_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc20_15.2 (constants.%T)]
// CHECK:STDOUT: %ptr.loc20_31.2: type = ptr_type %T.loc20_15.2 [symbolic = %ptr.loc20_31.2 (constants.%ptr)]
// CHECK:STDOUT: %J.type.loc20_32.2: type = facet_type <@J, @J(%ptr.loc20_31.2)> [symbolic = %J.type.loc20_32.2 (constants.%J.type.c71)]
// CHECK:STDOUT: %.loc20_33: <witness> = impl_self_witness constants.%D, @J, @J(%ptr.loc20_31.2) [symbolic = %.loc20_33 (constants.%.7a3)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %D.ref as %J.type.loc20_32.1;
// CHECK:STDOUT: }
@@ -2569,6 +2644,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc26_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc26_15.2 (constants.%T)]
// CHECK:STDOUT: %ptr.loc26_31.2: type = ptr_type %T.loc26_15.2 [symbolic = %ptr.loc26_31.2 (constants.%ptr)]
// CHECK:STDOUT: %J.type.loc26_32.2: type = facet_type <@J, @J(%ptr.loc26_31.2)> [symbolic = %J.type.loc26_32.2 (constants.%J.type.c71)]
// CHECK:STDOUT: %.loc26_34: <witness> = impl_self_witness constants.%D, @J, @J(%ptr.loc26_31.2) [symbolic = %.loc26_34 (constants.%.7a3)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
@@ -2583,6 +2659,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc32_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc32_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc32_15.2 (constants.%T)]
// CHECK:STDOUT: %N.type.loc32_31.2: type = facet_type <@N, @N(%T.loc32_15.2)> [symbolic = %N.type.loc32_31.2 (constants.%N.type.d682d6.1)]
// CHECK:STDOUT: %.loc32_33: <witness> = impl_self_witness constants.%D, @J, @J(%T.loc32_15.2) [symbolic = %.loc32_33 (constants.%.1a5)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
@@ -2598,6 +2675,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc38_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc38_15.2 (constants.%T)]
// CHECK:STDOUT: %ptr.loc38_31.2: type = ptr_type %T.loc38_15.2 [symbolic = %ptr.loc38_31.2 (constants.%ptr)]
// CHECK:STDOUT: %N.type.loc38_32.2: type = facet_type <@N, @N(%ptr.loc38_31.2)> [symbolic = %N.type.loc38_32.2 (constants.%N.type.d682d6.2)]
// CHECK:STDOUT: %.loc38_34: <witness> = impl_self_witness constants.%D, @J, @J(%ptr.loc38_31.2) [symbolic = %.loc38_34 (constants.%.7a3)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
@@ -2632,6 +2710,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt => constants.%T.patt
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %J.type => constants.%J.type.5c8
// CHECK:STDOUT: %.1 => constants.%.1a5
// CHECK:STDOUT: %J.impl_witness => constants.%J.impl_witness.699
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2645,6 +2724,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %ptr => constants.%ptr
// CHECK:STDOUT: %J.type => constants.%J.type.c71
// CHECK:STDOUT: %.1 => constants.%.7a3
// CHECK:STDOUT: %J.impl_witness => constants.%J.impl_witness.73b
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2652,12 +2732,14 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc8_15.2 => constants.%T
// CHECK:STDOUT: %J.type.loc8_31.2 => constants.%J.type.5c8
// CHECK:STDOUT: %.loc8_32 => constants.%.1a5
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @D.as.J.impl.5a5643.2(constants.%T) {
// CHECK:STDOUT: %T.patt.loc14_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc14_15.2 => constants.%T
// CHECK:STDOUT: %J.type.loc14_31.2 => constants.%J.type.5c8
// CHECK:STDOUT: %.loc14_33 => constants.%.1a5
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @D.as.J.impl.1010f3.1(constants.%T) {
@@ -2665,6 +2747,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc20_15.2 => constants.%T
// CHECK:STDOUT: %ptr.loc20_31.2 => constants.%ptr
// CHECK:STDOUT: %J.type.loc20_32.2 => constants.%J.type.c71
// CHECK:STDOUT: %.loc20_33 => constants.%.7a3
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @D.as.J.impl.1010f3.2(constants.%T) {
@@ -2672,6 +2755,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc26_15.2 => constants.%T
// CHECK:STDOUT: %ptr.loc26_31.2 => constants.%ptr
// CHECK:STDOUT: %J.type.loc26_32.2 => constants.%J.type.c71
// CHECK:STDOUT: %.loc26_34 => constants.%.7a3
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @N(constants.%T) {
@@ -2708,6 +2792,7 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.patt.loc32_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc32_15.2 => constants.%T
// CHECK:STDOUT: %N.type.loc32_31.2 => constants.%N.type.d682d6.1
// CHECK:STDOUT: %.loc32_33 => constants.%.1a5
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @N(constants.%ptr) {
@@ -2735,5 +2820,6 @@ impl forall [T: type] D as N(T*) {}
// CHECK:STDOUT: %T.loc38_15.2 => constants.%T
// CHECK:STDOUT: %ptr.loc38_31.2 => constants.%ptr
// CHECK:STDOUT: %N.type.loc38_32.2 => constants.%N.type.d682d6.2
// CHECK:STDOUT: %.loc38_34 => constants.%.7a3
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -318,6 +318,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c0c: type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.c16: type = facet_type <@I where %impl.elem0.c0c = %empty_struct_type> [concrete]
// CHECK:STDOUT: %.169: <witness> = impl_self_witness %C1, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C1.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C1, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -362,6 +363,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc5_23.2 = requirement_rewrite %impl.elem0.loc5_20.2, %.loc5_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: <witness> = impl_self_witness @C1.as.I.impl.%C1.ref, @I [concrete = constants.%.169]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I [from "interface.carbon"] {
@@ -422,6 +424,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c0c: type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.c16: type = facet_type <@I where %impl.elem0.c0c = %empty_struct_type> [concrete]
// CHECK:STDOUT: %.bd3: <witness> = impl_self_witness %C2, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C2.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C2, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -466,6 +469,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc5_23.2 = requirement_rewrite %impl.elem0.loc5_20.2, %.loc5_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: <witness> = impl_self_witness @C2.as.I.impl.%C2.ref.loc5, @I [concrete = constants.%.bd3]
// CHECK:STDOUT: impl_decl @C2.as.I.impl [concrete] {} {
// CHECK:STDOUT: %C2.ref.loc6: type = name_ref C2, file.%C2.decl [concrete = constants.%C2]
// CHECK:STDOUT: %I.ref.loc6: type = name_ref I, imports.%Main.I [concrete = constants.%I.type]
@@ -486,6 +490,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc6_23.2 = requirement_rewrite %impl.elem0.loc6_20.2, %.loc6_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc6: <witness> = impl_self_witness @C2.as.I.impl.%C2.ref.loc6, @I [concrete = constants.%.bd3]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I [from "interface.carbon"] {
@@ -535,6 +540,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %.afd: <witness> = impl_self_witness %C3, @I [concrete]
// CHECK:STDOUT: %.Self.frozen: %I.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %.Self.frozen.as_type: type = facet_access_type %.Self.frozen [symbolic_self]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
@@ -574,6 +580,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %C3.ref: type = name_ref C3, file.%C3.decl [concrete = constants.%C3]
// CHECK:STDOUT: %I.ref: type = name_ref I, imports.%Main.I [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @C3.as.I.impl.a518fc.1.%C3.ref, @I [concrete = constants.%.afd]
// CHECK:STDOUT: impl_decl @C3.as.I.impl.a518fc.2 [concrete] {} {
// CHECK:STDOUT: %C3.ref: type = name_ref C3, file.%C3.decl [concrete = constants.%C3]
// CHECK:STDOUT: %I.ref: type = name_ref I, imports.%Main.I [concrete = constants.%I.type]
@@ -594,6 +601,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc10_23.2 = requirement_rewrite %impl.elem0.loc10_20.2, %.loc10_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @C3.as.I.impl.a518fc.2.%C3.ref, @I [concrete = constants.%.afd]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I [from "interface.carbon"] {
@@ -657,6 +665,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c0c: type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.c16: type = facet_type <@I where %impl.elem0.c0c = %empty_struct_type> [concrete]
// CHECK:STDOUT: %.911: <witness> = impl_self_witness %C4, @I [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %I_where.type.d99: type = facet_type <@I where %impl.elem0.c0c = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %I.impl_witness.4a9: <witness> = impl_witness @C4.as.I.impl.c5f663.2.%I.impl_witness_table [concrete]
@@ -703,6 +712,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc9_23.2 = requirement_rewrite %impl.elem0.loc9_20.2, %.loc9_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @C4.as.I.impl.c5f663.1.%C4.ref, @I [concrete = constants.%.911]
// CHECK:STDOUT: impl_decl @C4.as.I.impl.c5f663.2 [concrete] {} {
// CHECK:STDOUT: %C4.ref: type = name_ref C4, file.%C4.decl [concrete = constants.%C4]
// CHECK:STDOUT: %I.ref: type = name_ref I, imports.%Main.I [concrete = constants.%I.type]
@@ -723,6 +733,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc10_23.2 = requirement_rewrite %impl.elem0.loc10_20.2, %.loc10_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @C4.as.I.impl.c5f663.2.%C4.ref, @I [concrete = constants.%.911]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I [from "interface.carbon"] {
@@ -964,6 +975,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c0c: type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0.c0c = %empty_struct_type> [concrete]
// CHECK:STDOUT: %.7ff: <witness> = impl_self_witness %C6, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.a68: <witness> = impl_witness @C6.as.I.impl.e1b87a.2.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C6, (%I.impl_witness.a68) [concrete]
// CHECK:STDOUT: }
@@ -1008,10 +1020,12 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc5_23.2 = requirement_rewrite %impl.elem0.loc5_20.2, %.loc5_26.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: <witness> = impl_self_witness @C6.as.I.impl.e1b87a.1.%C6.ref, @I [concrete = constants.%.7ff]
// CHECK:STDOUT: impl_decl @C6.as.I.impl.e1b87a.2 [concrete] {} {
// CHECK:STDOUT: %C6.ref: type = name_ref C6, file.%C6.decl [concrete = constants.%C6]
// CHECK:STDOUT: %I.ref: type = name_ref I, imports.%Main.I [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @C6.as.I.impl.e1b87a.2.%C6.ref, @I [concrete = constants.%.7ff]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I [from "interface.carbon"] {
@@ -1499,6 +1513,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c0c: type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.c16: type = facet_type <@I where %impl.elem0.c0c = %empty_struct_type> [concrete]
// CHECK:STDOUT: %.160: <witness> = impl_self_witness %CB, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @CB.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %CB, (%I.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -1556,6 +1571,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc6_35.2 = requirement_rewrite %impl.elem0.subst.loc6_32.2, %.loc6_38.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc6: <witness> = impl_self_witness @CB.as.I.impl.%CB.ref, @I [concrete = constants.%.160]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I [from "interface.carbon"] {
@@ -1618,6 +1634,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %.92a: <witness> = impl_self_witness %.Self, @NonType [symbolic_self]
// CHECK:STDOUT: %impl.elem0.74f: %struct_type.a.225 = impl_witness_access %.92a, element0 [symbolic_self]
// CHECK:STDOUT: %NonType_where.type.182: type = facet_type <@NonType where %impl.elem0.74f = %struct> [concrete]
// CHECK:STDOUT: %.910: <witness> = impl_self_witness %CC, @NonType [concrete]
// CHECK:STDOUT: %NonType.impl_witness: <witness> = impl_witness @CC.as.NonType.impl.%NonType.impl_witness_table [concrete]
// CHECK:STDOUT: %NonType.facet: %NonType.type = facet_value %CC, (%NonType.impl_witness) [concrete]
// CHECK:STDOUT: }
@@ -1666,6 +1683,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc6_29.2 = requirement_rewrite %impl.elem0.loc6_26.2, %.loc6_39.3 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc6: <witness> = impl_self_witness @CC.as.NonType.impl.%CC.ref, @NonType [concrete = constants.%.910]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @NonType [from "interface.carbon"] {
@@ -1775,6 +1793,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %.1c7: <witness> = impl_self_witness %.Self, @IF [symbolic_self]
// CHECK:STDOUT: %impl.elem0.b76: %.f1f = impl_witness_access %.1c7, element0 [symbolic_self]
// CHECK:STDOUT: %IF_where.type: type = facet_type <@IF where %impl.elem0.b76 = %int_0> [concrete]
// CHECK:STDOUT: %.1f4: <witness> = impl_self_witness %CD, @IF [concrete]
// CHECK:STDOUT: %IF.impl_witness: <witness> = impl_witness @CD.as.IF.impl.%IF.impl_witness_table [concrete]
// CHECK:STDOUT: %CD.as.IF.impl.F.type: type = fn_type @CD.as.IF.impl.F [concrete]
// CHECK:STDOUT: %CD.as.IF.impl.F: %CD.as.IF.impl.F.type = struct_value () [concrete]
@@ -1818,6 +1837,7 @@ impl CD as IF where .F = 0 {
// CHECK:STDOUT: %rewrite.loc10_24.2 = requirement_rewrite %impl.elem0.loc10_21.2, %int_0 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @CD.as.IF.impl.%CD.ref, @IF [concrete = constants.%.1f4]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @IF [from "interface_with_function.carbon"] {
+2
View File
@@ -167,6 +167,7 @@ fn F(x: C, y: C) -> C {
// CHECK:STDOUT: %.719: Core.Form = init_form %Self.as_type [symbolic]
// CHECK:STDOUT: %other.param_patt.03b: %pattern_type.78d = value_param_pattern [symbolic]
// CHECK:STDOUT: %other.patt.bca: %pattern_type.78d = at_binding_pattern other, %other.param_patt.03b [symbolic]
// CHECK:STDOUT: %.63f: <witness> = impl_self_witness %C, @Add [concrete]
// CHECK:STDOUT: %Add.impl_witness: <witness> = impl_witness @C.as.Add.impl.%Add.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete]
// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete]
@@ -221,6 +222,7 @@ fn F(x: C, y: C) -> C {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %Add.ref: type = name_ref Add, imports.%Main.Add [concrete = constants.%Add.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @C.as.Add.impl.%C.ref, @Add [concrete = constants.%.63f]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %x.param_patt: %pattern_type.98b = value_param_pattern [concrete = constants.%x.param_patt]
// CHECK:STDOUT: %x.patt: %pattern_type.98b = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt]
@@ -72,12 +72,14 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %.fdf: <witness> = impl_self_witness %T, @Y [symbolic]
// CHECK:STDOUT: %Y.impl_witness: <witness> = impl_witness @T.as.Y.impl.%Y.impl_witness_table, @T.as.Y.impl(%T) [symbolic]
// CHECK:STDOUT: %Y.facet: %Y.type = facet_value %T, (%Y.impl_witness) [symbolic]
// CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete]
// CHECK:STDOUT: %Self.cb6: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic]
// CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic]
// CHECK:STDOUT: %.0ce: <witness> = impl_self_witness %U, @Z [symbolic]
// CHECK:STDOUT: %Z.impl_witness.4e2: <witness> = impl_witness @U.as.Z.impl.%Z.impl_witness_table, @U.as.Z.impl(%U) [symbolic]
// CHECK:STDOUT: %Z.facet.156: %Z.type = facet_value %U, (%Z.impl_witness.4e2) [symbolic]
// CHECK:STDOUT: %pattern_type.5d7: type = pattern_type %Z.type [concrete]
@@ -97,6 +99,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: %impl.elem0: %Y.type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %as_type: type = facet_access_type %impl.elem0 [symbolic]
// CHECK:STDOUT: %Z.lookup_impl_witness: <witness> = lookup_impl_witness %impl.elem0, @Z [symbolic]
// CHECK:STDOUT: %.516: <witness> = impl_self_witness %as_type, @Z [symbolic]
// CHECK:STDOUT: %Z.impl_witness.5d1: <witness> = impl_witness @U.as.Z.impl.%Z.impl_witness_table, @U.as.Z.impl(%as_type) [symbolic]
// CHECK:STDOUT: %.5b1: require_specific_def_type = require_specific_def @U.as.Z.impl(%as_type) [symbolic]
// CHECK:STDOUT: %Z.facet.4d3: %Z.type = facet_value %as_type, (%Z.lookup_impl_witness) [symbolic]
@@ -128,6 +131,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc5_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc5_15.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: <witness> = impl_self_witness @T.as.Y.impl.%T.ref, @Y [symbolic = @T.as.Y.impl.%.loc5_30 (constants.%.fdf)]
// CHECK:STDOUT: %Z.decl: type = interface_decl @Z [concrete = constants.%Z.type] {} {}
// CHECK:STDOUT: impl_decl @U.as.Z.impl [concrete] {
// CHECK:STDOUT: %U.patt.loc9_15.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_15.2 (constants.%U.patt)]
@@ -140,6 +144,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: }
// CHECK:STDOUT: %U.loc9_15.1: type = symbolic_binding U, 0 [symbolic = %U.loc9_15.2 (constants.%U)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9: <witness> = impl_self_witness @U.as.Z.impl.%U.ref, @Z [symbolic = @U.as.Z.impl.%.loc9_30 (constants.%.0ce)]
// CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] {
// CHECK:STDOUT: %V.patt.loc11_10.1: %pattern_type.5d7 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_10.2 (constants.%V.patt)]
// CHECK:STDOUT: } {
@@ -216,6 +221,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: generic impl @T.as.Y.impl(%T.loc5_15.1: type) {
// CHECK:STDOUT: %T.patt.loc5_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc5_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc5_15.2 (constants.%T)]
// CHECK:STDOUT: %.loc5_30: <witness> = impl_self_witness %T.loc5_15.2, @Y [symbolic = %.loc5_30 (constants.%.fdf)]
// CHECK:STDOUT: %Y.impl_witness.loc5_30.2: <witness> = impl_witness %Y.impl_witness_table, @T.as.Y.impl(%T.loc5_15.2) [symbolic = %Y.impl_witness.loc5_30.2 (constants.%Y.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -233,6 +239,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: generic impl @U.as.Z.impl(%U.loc9_15.1: type) {
// CHECK:STDOUT: %U.patt.loc9_15.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_15.2 (constants.%U.patt)]
// CHECK:STDOUT: %U.loc9_15.2: type = symbolic_binding U, 0 [symbolic = %U.loc9_15.2 (constants.%U)]
// CHECK:STDOUT: %.loc9_30: <witness> = impl_self_witness %U.loc9_15.2, @Z [symbolic = %.loc9_30 (constants.%.0ce)]
// CHECK:STDOUT: %Z.impl_witness.loc9_30.2: <witness> = impl_witness %Z.impl_witness_table, @U.as.Z.impl(%U.loc9_15.2) [symbolic = %Z.impl_witness.loc9_30.2 (constants.%Z.impl_witness.4e2)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -288,6 +295,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: specific @T.as.Y.impl(constants.%T) {
// CHECK:STDOUT: %T.patt.loc5_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc5_15.2 => constants.%T
// CHECK:STDOUT: %.loc5_30 => constants.%.fdf
// CHECK:STDOUT: %Y.impl_witness.loc5_30.2 => constants.%Y.impl_witness
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -302,6 +310,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: specific @U.as.Z.impl(constants.%U) {
// CHECK:STDOUT: %U.patt.loc9_15.2 => constants.%U.patt
// CHECK:STDOUT: %U.loc9_15.2 => constants.%U
// CHECK:STDOUT: %.loc9_30 => constants.%.0ce
// CHECK:STDOUT: %Z.impl_witness.loc9_30.2 => constants.%Z.impl_witness.4e2
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -319,6 +328,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: specific @U.as.Z.impl(constants.%as_type) {
// CHECK:STDOUT: %U.patt.loc9_15.2 => constants.%U.patt
// CHECK:STDOUT: %U.loc9_15.2 => constants.%as_type
// CHECK:STDOUT: %.loc9_30 => constants.%.516
// CHECK:STDOUT: %Z.impl_witness.loc9_30.2 => constants.%Z.impl_witness.5d1
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -382,11 +392,13 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: %c.param_patt.6ae: %pattern_type.d24 = value_param_pattern [symbolic]
// CHECK:STDOUT: %c.patt.2df: %pattern_type.d24 = at_binding_pattern c, %c.param_patt.6ae [symbolic]
// CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic]
// CHECK:STDOUT: %.0ce: <witness> = impl_self_witness %U, @Z [symbolic]
// CHECK:STDOUT: %Z.impl_witness.824: <witness> = impl_witness imports.%Z.impl_witness_table, @U.as.Z.impl(%U) [symbolic]
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic]
// CHECK:STDOUT: %.68b: require_specific_def_type = require_specific_def @U.as.Z.impl(%as_type) [symbolic]
// CHECK:STDOUT: %Z.impl_witness.6f3: <witness> = impl_witness imports.%Z.impl_witness_table, @U.as.Z.impl(%as_type) [symbolic]
// CHECK:STDOUT: %.7e3: <witness> = impl_self_witness %as_type, @Z [symbolic]
// CHECK:STDOUT: %.Self.frozen.3a0: %I.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %I.WithSelf.F.type.183: type = fn_type @I.WithSelf.F, @I.WithSelf(%.Self.frozen.3a0) [symbolic_self]
// CHECK:STDOUT: %I.WithSelf.F.b1e: %I.WithSelf.F.type.183 = struct_value () [symbolic_self]
@@ -397,15 +409,19 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: %impl.elem0.7a5: %Y.type = impl_witness_access %.f01, element0 [symbolic_self]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %.fdf: <witness> = impl_self_witness %T, @Y [symbolic]
// CHECK:STDOUT: %Y.impl_witness.3d4: <witness> = impl_witness imports.%Y.impl_witness_table, @T.as.Y.impl(%T) [symbolic]
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %.fa3: <witness> = impl_self_witness %empty_tuple.type, @Y [concrete]
// CHECK:STDOUT: %Y.impl_witness.2e8: <witness> = impl_witness imports.%Y.impl_witness_table, @T.as.Y.impl(%empty_tuple.type) [concrete]
// CHECK:STDOUT: %Y.facet: %Y.type = facet_value %empty_tuple.type, (%Y.impl_witness.2e8) [concrete]
// CHECK:STDOUT: %.Self: %I.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %.00f: <witness> = impl_self_witness %.Self, @I [symbolic_self]
// CHECK:STDOUT: %impl.elem0.e02: %Y.type = impl_witness_access %.00f, element0 [symbolic_self]
// CHECK:STDOUT: %I_where.type.4ba: type = facet_type <@I where %impl.elem0.e02 = %Y.facet> [concrete]
// CHECK:STDOUT: %.a26: <witness> = impl_self_witness %D, @I [symbolic]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @D.as.I.impl.%I.impl_witness_table, @D.as.I.impl(%N) [symbolic]
// CHECK:STDOUT: %.78e: <witness> = impl_self_witness %empty_tuple.type, @Z [concrete]
// CHECK:STDOUT: %Z.impl_witness.1c1: <witness> = impl_witness imports.%Z.impl_witness_table, @U.as.Z.impl(%empty_tuple.type) [concrete]
// CHECK:STDOUT: %.dd0: require_specific_def_type = require_specific_def @U.as.Z.impl(%empty_tuple.type) [concrete]
// CHECK:STDOUT: %Z.facet.39d: %Z.type = facet_value %empty_tuple.type, (%Z.impl_witness.1c1) [concrete]
@@ -500,6 +516,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: }
// CHECK:STDOUT: %N.loc20_15.2: %E = symbolic_binding N, 0 [symbolic = %N.loc20_15.1 (constants.%N)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc20: <witness> = impl_self_witness @D.as.I.impl.%D.loc20_23.2, @I [symbolic = @D.as.I.impl.%.loc20_48 (constants.%.a26)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I [from "impl_def.carbon"] {
@@ -532,6 +549,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: generic impl @U.as.Z.impl(imports.%Main.import_ref.b3bc94.1: type) [from "impl_def.carbon"] {
// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)]
// CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)]
// CHECK:STDOUT: %.1: <witness> = impl_self_witness %U, @Z [symbolic = %.1 (constants.%.0ce)]
// CHECK:STDOUT: %Z.impl_witness: <witness> = impl_witness imports.%Z.impl_witness_table, @U.as.Z.impl(%U) [symbolic = %Z.impl_witness (constants.%Z.impl_witness.824)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -545,6 +563,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: generic impl @T.as.Y.impl(imports.%Main.import_ref.b3bc94.2: type) [from "impl_def.carbon"] {
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %.1: <witness> = impl_self_witness %T, @Y [symbolic = %.1 (constants.%.fdf)]
// CHECK:STDOUT: %Y.impl_witness: <witness> = impl_witness imports.%Y.impl_witness_table, @T.as.Y.impl(%T) [symbolic = %Y.impl_witness (constants.%Y.impl_witness.3d4)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -559,6 +578,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: %N.patt.loc20_15.2: %pattern_type.849 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc20_15.2 (constants.%N.patt)]
// CHECK:STDOUT: %N.loc20_15.1: %E = symbolic_binding N, 0 [symbolic = %N.loc20_15.1 (constants.%N)]
// CHECK:STDOUT: %D.loc20_23.1: type = class_type @D, @D(%N.loc20_15.1) [symbolic = %D.loc20_23.1 (constants.%D)]
// CHECK:STDOUT: %.loc20_48: <witness> = impl_self_witness %D.loc20_23.1, @I [symbolic = %.loc20_48 (constants.%.a26)]
// CHECK:STDOUT: %I.impl_witness.loc20_48.2: <witness> = impl_witness %I.impl_witness_table, @D.as.I.impl(%N.loc20_15.1) [symbolic = %I.impl_witness.loc20_48.2 (constants.%I.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -687,12 +707,14 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: specific @U.as.Z.impl(constants.%U) {
// CHECK:STDOUT: %U.patt => constants.%U.patt
// CHECK:STDOUT: %U => constants.%U
// CHECK:STDOUT: %.1 => constants.%.0ce
// CHECK:STDOUT: %Z.impl_witness => constants.%Z.impl_witness.824
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @U.as.Z.impl(constants.%as_type) {
// CHECK:STDOUT: %U.patt => constants.%U.patt
// CHECK:STDOUT: %U => constants.%as_type
// CHECK:STDOUT: %.1 => constants.%.7e3
// CHECK:STDOUT: %Z.impl_witness => constants.%Z.impl_witness.6f3
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -722,12 +744,14 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: specific @T.as.Y.impl(constants.%T) {
// CHECK:STDOUT: %T.patt => constants.%T.patt
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %.1 => constants.%.fdf
// CHECK:STDOUT: %Y.impl_witness => constants.%Y.impl_witness.3d4
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T.as.Y.impl(constants.%empty_tuple.type) {
// CHECK:STDOUT: %T.patt => constants.%T.patt
// CHECK:STDOUT: %T => constants.%empty_tuple.type
// CHECK:STDOUT: %.1 => constants.%.fa3
// CHECK:STDOUT: %Y.impl_witness => constants.%Y.impl_witness.2e8
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -737,6 +761,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: %N.patt.loc20_15.2 => constants.%N.patt
// CHECK:STDOUT: %N.loc20_15.1 => constants.%N
// CHECK:STDOUT: %D.loc20_23.1 => constants.%D
// CHECK:STDOUT: %.loc20_48 => constants.%.a26
// CHECK:STDOUT: %I.impl_witness.loc20_48.2 => constants.%I.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -747,6 +772,7 @@ impl forall [N: E] D(N) as I where .Assoc = () {
// CHECK:STDOUT: specific @U.as.Z.impl(constants.%empty_tuple.type) {
// CHECK:STDOUT: %U.patt => constants.%U.patt
// CHECK:STDOUT: %U => constants.%empty_tuple.type
// CHECK:STDOUT: %.1 => constants.%.78e
// CHECK:STDOUT: %Z.impl_witness => constants.%Z.impl_witness.1c1
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
+9
View File
@@ -133,6 +133,7 @@ fn G() {
// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete]
// CHECK:STDOUT: %x.param_patt.c77: %pattern_type.a96 = value_param_pattern [concrete]
// CHECK:STDOUT: %x.patt.05f: %pattern_type.a96 = at_binding_pattern x, %x.param_patt.c77 [concrete]
// CHECK:STDOUT: %.4ce: <witness> = impl_self_witness %C.6b1ed7.2, @I [symbolic]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%Y) [symbolic]
// CHECK:STDOUT: %pattern_type.d0f: type = pattern_type %C.6b1ed7.2 [symbolic]
// CHECK:STDOUT: %x.param_patt.bc9: %pattern_type.d0f = value_param_pattern [symbolic]
@@ -213,6 +214,7 @@ fn G() {
// CHECK:STDOUT: }
// CHECK:STDOUT: %Y.loc7_15.2: %empty_tuple.type = symbolic_binding Y, 0 [symbolic = %Y.loc7_15.1 (constants.%Y)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7: <witness> = impl_self_witness @C.as.I.impl.%C.loc7_24.2, @I [symbolic = @C.as.I.impl.%.loc7_31 (constants.%.4ce)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I [from "a.carbon"] {
@@ -230,6 +232,7 @@ fn G() {
// CHECK:STDOUT: %Y.patt.loc7_15.2: %pattern_type.cb1 = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc7_15.2 (constants.%Y.patt)]
// CHECK:STDOUT: %Y.loc7_15.1: %empty_tuple.type = symbolic_binding Y, 0 [symbolic = %Y.loc7_15.1 (constants.%Y)]
// CHECK:STDOUT: %C.loc7_24.1: type = class_type @C, @C(%Y.loc7_15.1) [symbolic = %C.loc7_24.1 (constants.%C.6b1ed7.2)]
// CHECK:STDOUT: %.loc7_31: <witness> = impl_self_witness %C.loc7_24.1, @I [symbolic = %.loc7_31 (constants.%.4ce)]
// CHECK:STDOUT: %I.impl_witness.loc7_31.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl(%Y.loc7_15.1) [symbolic = %I.impl_witness.loc7_31.2 (constants.%I.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -376,6 +379,7 @@ fn G() {
// CHECK:STDOUT: %Y.patt.loc7_15.2 => constants.%Y.patt
// CHECK:STDOUT: %Y.loc7_15.1 => constants.%Y
// CHECK:STDOUT: %C.loc7_24.1 => constants.%C.6b1ed7.2
// CHECK:STDOUT: %.loc7_31 => constants.%.4ce
// CHECK:STDOUT: %I.impl_witness.loc7_31.2 => constants.%I.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -430,6 +434,7 @@ fn G() {
// CHECK:STDOUT: %assoc0.232: %I.assoc_type = assoc_entity element0, imports.%Main.import_ref.9f7 [concrete]
// CHECK:STDOUT: %Y: %empty_tuple.type = symbolic_binding Y, 0 [symbolic]
// CHECK:STDOUT: %C.6b1ed7.2: type = class_type @C, @C(%Y) [symbolic]
// CHECK:STDOUT: %.4ce: <witness> = impl_self_witness %C.6b1ed7.2, @I [symbolic]
// CHECK:STDOUT: %I.impl_witness.95e: <witness> = impl_witness imports.%I.impl_witness_table, @C.as.I.impl(%Y) [symbolic]
// CHECK:STDOUT: %C.as.I.impl.F.type.c7d3b5.1: type = fn_type @C.as.I.impl.F.1, @C.as.I.impl(%Y) [symbolic]
// CHECK:STDOUT: %C.as.I.impl.F.c1d971.1: %C.as.I.impl.F.type.c7d3b5.1 = struct_value () [symbolic]
@@ -453,6 +458,7 @@ fn G() {
// CHECK:STDOUT: %bound_method.ef4: <bound method> = bound_method %.e66, %specific_impl_fn [symbolic]
// CHECK:STDOUT: %bound_method.3e7: <bound method> = bound_method %.e66, %impl.elem0 [symbolic]
// CHECK:STDOUT: %C.as.I.impl.F.specific_fn.79d: <specific function> = specific_function %C.as.I.impl.F.c1d971.2, @C.as.I.impl.F.2(%Y) [symbolic]
// CHECK:STDOUT: %.3b5: <witness> = impl_self_witness %C.2c9, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.953: <witness> = impl_witness imports.%I.impl_witness_table, @C.as.I.impl(%empty_tuple) [concrete]
// CHECK:STDOUT: %C.as.I.impl.F.type.42776e.1: type = fn_type @C.as.I.impl.F.2, @C.as.I.impl(%empty_tuple) [concrete]
// CHECK:STDOUT: %C.as.I.impl.F.4ca3bc.1: %C.as.I.impl.F.type.42776e.1 = struct_value () [concrete]
@@ -533,6 +539,7 @@ fn G() {
// CHECK:STDOUT: %Y.patt: %pattern_type.cb1 = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt (constants.%Y.patt)]
// CHECK:STDOUT: %Y: %empty_tuple.type = symbolic_binding Y, 0 [symbolic = %Y (constants.%Y)]
// CHECK:STDOUT: %C: type = class_type @C, @C(%Y) [symbolic = %C (constants.%C.6b1ed7.2)]
// CHECK:STDOUT: %.1: <witness> = impl_self_witness %C, @I [symbolic = %.1 (constants.%.4ce)]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness imports.%I.impl_witness_table, @C.as.I.impl(%Y) [symbolic = %I.impl_witness (constants.%I.impl_witness.95e)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -668,6 +675,7 @@ fn G() {
// CHECK:STDOUT: %Y.patt => constants.%Y.patt
// CHECK:STDOUT: %Y => constants.%Y
// CHECK:STDOUT: %C => constants.%C.6b1ed7.2
// CHECK:STDOUT: %.1 => constants.%.4ce
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.95e
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -696,6 +704,7 @@ fn G() {
// CHECK:STDOUT: %Y.patt => constants.%Y.patt
// CHECK:STDOUT: %Y => constants.%empty_tuple
// CHECK:STDOUT: %C => constants.%C.2c9
// CHECK:STDOUT: %.1 => constants.%.3b5
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.953
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -72,6 +72,7 @@ fn H() -> C({}).(I.F)() {}
// CHECK:STDOUT: %I.WithSelf.F.ec6: %I.WithSelf.F.type.dcc = struct_value () [symbolic]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %.41f: <witness> = impl_self_witness %C, @I [symbolic]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table, @C.as.I.impl(%T) [symbolic]
// CHECK:STDOUT: %C.as.I.impl.F.type: type = fn_type @C.as.I.impl.F, @C.as.I.impl(%T) [symbolic]
// CHECK:STDOUT: %C.as.I.impl.F: %C.as.I.impl.F.type = struct_value () [symbolic]
@@ -108,6 +109,7 @@ fn H() -> C({}).(I.F)() {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc10_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc10_15.1 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @C.as.I.impl.%C.loc10_26.2, @I [symbolic = @C.as.I.impl.%.loc10_33 (constants.%.41f)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -130,6 +132,7 @@ fn H() -> C({}).(I.F)() {}
// CHECK:STDOUT: %T.patt.loc10_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc10_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc10_15.1 (constants.%T)]
// CHECK:STDOUT: %C.loc10_26.1: type = class_type @C, @C(%T.loc10_15.1) [symbolic = %C.loc10_26.1 (constants.%C)]
// CHECK:STDOUT: %.loc10_33: <witness> = impl_self_witness %C.loc10_26.1, @I [symbolic = %.loc10_33 (constants.%.41f)]
// CHECK:STDOUT: %I.impl_witness.loc10_33.2: <witness> = impl_witness %I.impl_witness_table, @C.as.I.impl(%T.loc10_15.1) [symbolic = %I.impl_witness.loc10_33.2 (constants.%I.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -194,6 +197,7 @@ fn H() -> C({}).(I.F)() {}
// CHECK:STDOUT: %T.patt.loc10_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc10_15.1 => constants.%T
// CHECK:STDOUT: %C.loc10_26.1 => constants.%C
// CHECK:STDOUT: %.loc10_33 => constants.%.41f
// CHECK:STDOUT: %I.impl_witness.loc10_33.2 => constants.%I.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -238,9 +242,11 @@ fn H() -> C({}).(I.F)() {}
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, imports.%Main.import_ref.9f7 [concrete]
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %.41f: <witness> = impl_self_witness %C.1d0, @I [symbolic]
// CHECK:STDOUT: %I.impl_witness.5b2: <witness> = impl_witness imports.%I.impl_witness_table, @C.as.I.impl(%T) [symbolic]
// CHECK:STDOUT: %C.as.I.impl.F.type.86f: type = fn_type @C.as.I.impl.F, @C.as.I.impl(%T) [symbolic]
// CHECK:STDOUT: %C.as.I.impl.F.45f: %C.as.I.impl.F.type.86f = struct_value () [symbolic]
// CHECK:STDOUT: %.0b2: <witness> = impl_self_witness %C.d8e, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.a73: <witness> = impl_witness imports.%I.impl_witness_table, @C.as.I.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %C.as.I.impl.F.type.7ce: type = fn_type @C.as.I.impl.F, @C.as.I.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %C.as.I.impl.F.899: %C.as.I.impl.F.type.7ce = struct_value () [concrete]
@@ -335,6 +341,7 @@ fn H() -> C({}).(I.F)() {}
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.1d0)]
// CHECK:STDOUT: %.1: <witness> = impl_self_witness %C, @I [symbolic = %.1 (constants.%.41f)]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness imports.%I.impl_witness_table, @C.as.I.impl(%T) [symbolic = %I.impl_witness (constants.%I.impl_witness.5b2)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -413,6 +420,7 @@ fn H() -> C({}).(I.F)() {}
// CHECK:STDOUT: %T.patt => constants.%T.patt
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %C => constants.%C.1d0
// CHECK:STDOUT: %.1 => constants.%.41f
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.5b2
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -426,6 +434,7 @@ fn H() -> C({}).(I.F)() {}
// CHECK:STDOUT: %T.patt => constants.%T.patt
// CHECK:STDOUT: %T => constants.%empty_struct_type
// CHECK:STDOUT: %C => constants.%C.d8e
// CHECK:STDOUT: %.1 => constants.%.0b2
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.a73
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
+21
View File
@@ -213,6 +213,7 @@ interface B {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %.aaf: <witness> = impl_self_witness %empty_struct_type, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @empty_struct_type.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -226,11 +227,13 @@ interface B {
// CHECK:STDOUT: %.loc6_7.2: type = converted %.loc6_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %I.ref.loc6: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc6: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc6_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: impl_decl @empty_struct_type.as.I.impl [concrete] {} {
// CHECK:STDOUT: %.loc15_7.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
// CHECK:STDOUT: %.loc15_7.2: type = converted %.loc15_7.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %I.ref.loc15: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15: <witness> = impl_self_witness @empty_struct_type.as.I.impl.%.loc15_7.2, @I [concrete = constants.%.aaf]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I;
@@ -251,6 +254,7 @@ interface B {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.ffd: <witness> = impl_self_witness %C, @J [concrete]
// CHECK:STDOUT: %J.impl_witness: <witness> = impl_witness @C.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -270,6 +274,7 @@ interface B {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc20: <witness> = impl_self_witness @C.as.J.impl.%C.ref, @J [concrete = constants.%.ffd]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @J;
@@ -300,6 +305,7 @@ interface B {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.ffd: <witness> = impl_self_witness %C, @J [concrete]
// CHECK:STDOUT: %J.impl_witness: <witness> = impl_witness @C.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -314,6 +320,7 @@ interface B {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc13: <witness> = impl_self_witness @C.as.J.impl.%C.ref, @J [concrete = constants.%.ffd]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @J;
@@ -419,8 +426,10 @@ interface B {
// CHECK:STDOUT: %.Self: %I.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self]
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where .Self impls @Incomplete> [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.d08: %Incomplete.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %.f0c: <witness> = impl_self_witness %C, @Incomplete [concrete]
// CHECK:STDOUT: %Incomplete.impl_witness: <witness> = impl_witness @C.as.Incomplete.impl.%Incomplete.impl_witness_table [concrete]
// CHECK:STDOUT: %Incomplete.facet: %Incomplete.type = facet_value %C, (%Incomplete.impl_witness) [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete]
@@ -455,11 +464,13 @@ interface B {
// CHECK:STDOUT: %impls.loc8_25.2 = requirement_impls %.loc8_19.2, %Incomplete.ref.loc8 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc8, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: %Incomplete.decl.loc10: type = interface_decl @Incomplete [concrete = constants.%Incomplete.type] {} {}
// CHECK:STDOUT: impl_decl @C.as.Incomplete.impl [concrete] {} {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %Incomplete.ref: type = name_ref Incomplete, file.%Incomplete.decl.loc6 [concrete = constants.%Incomplete.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @C.as.Incomplete.impl.%C.ref, @Incomplete [concrete = constants.%.f0c]
// CHECK:STDOUT: impl_decl @C.as.I.impl [concrete] {} {
// CHECK:STDOUT: %C.ref.loc13: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %I.ref.loc13: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
@@ -480,6 +491,7 @@ interface B {
// CHECK:STDOUT: %impls.loc13_25.2 = requirement_impls %.loc13_19.2, %Incomplete.ref.loc13 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc13: <witness> = impl_self_witness @C.as.I.impl.%C.ref.loc13, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -568,8 +580,10 @@ interface B {
// CHECK:STDOUT: %.b2e: <witness> = impl_self_witness %.Self, @J [symbolic_self]
// CHECK:STDOUT: %impl.elem0.4f1: type = impl_witness_access %.b2e, element0 [symbolic_self]
// CHECK:STDOUT: %J_where.type.297: type = facet_type <@J where .Self impls @Incomplete and %impl.elem0.4f1 = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %.ffd: <witness> = impl_self_witness %C, @J [concrete]
// CHECK:STDOUT: %J.impl_witness: <witness> = impl_witness @C.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.d08: %Incomplete.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %.f0c: <witness> = impl_self_witness %C, @Incomplete [concrete]
// CHECK:STDOUT: %Incomplete.impl_witness: <witness> = impl_witness @C.as.Incomplete.impl.%Incomplete.impl_witness_table [concrete]
// CHECK:STDOUT: %Incomplete.facet: %Incomplete.type = facet_value %C, (%Incomplete.impl_witness) [concrete]
// CHECK:STDOUT: %J.facet: %J.type = facet_value %C, (%J.impl_witness) [concrete]
@@ -615,11 +629,13 @@ interface B {
// CHECK:STDOUT: %rewrite.loc8_49.2 = requirement_rewrite %impl.elem0.loc8_46.2, %.loc8_52.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @C.as.J.impl.%C.ref.loc8, @J [concrete = constants.%.ffd]
// CHECK:STDOUT: %Incomplete.decl.loc10: type = interface_decl @Incomplete [concrete = constants.%Incomplete.type] {} {}
// CHECK:STDOUT: impl_decl @C.as.Incomplete.impl [concrete] {} {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %Incomplete.ref: type = name_ref Incomplete, file.%Incomplete.decl.loc6 [concrete = constants.%Incomplete.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @C.as.Incomplete.impl.%C.ref, @Incomplete [concrete = constants.%.f0c]
// CHECK:STDOUT: impl_decl @C.as.J.impl [concrete] {} {
// CHECK:STDOUT: %C.ref.loc13: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %J.ref.loc13: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
@@ -651,6 +667,7 @@ interface B {
// CHECK:STDOUT: %rewrite.loc13_49.2 = requirement_rewrite %impl.elem0.loc13_46.2, %.loc13_52.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc13: <witness> = impl_self_witness @C.as.J.impl.%C.ref.loc13, @J [concrete = constants.%.ffd]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @J {
@@ -742,6 +759,7 @@ interface B {
// CHECK:STDOUT: %.Self: %I.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self]
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where .Self impls @Incomplete> [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -774,6 +792,7 @@ interface B {
// CHECK:STDOUT: %impls.loc12_25.2 = requirement_impls %.loc12_19.2, %Incomplete.ref [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @C.as.I.impl.%C.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
@@ -824,6 +843,7 @@ interface B {
// CHECK:STDOUT: %.Self: %I.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self]
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where .Self impls @Incomplete> [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %C.as.I.impl.F.type: type = fn_type @C.as.I.impl.F [concrete]
// CHECK:STDOUT: %C.as.I.impl.F: %C.as.I.impl.F.type = struct_value () [concrete]
@@ -858,6 +878,7 @@ interface B {
// CHECK:STDOUT: %impls.loc12_25.2 = requirement_impls %.loc12_19.2, %Incomplete.ref [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @C.as.I.impl.%C.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
+8 -4
View File
@@ -264,6 +264,7 @@ fn InstanceC(a: A) -> C {
// CHECK:STDOUT: %B: type = class_type @B [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %Action.type.5d2: type = facet_type <@Action, @Action(%B)> [concrete]
// CHECK:STDOUT: %.c1e: <witness> = impl_self_witness %A, @Action, @Action(%B) [concrete]
// CHECK:STDOUT: %Action.impl_witness: <witness> = impl_witness @A.as.Action.impl.%Action.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.7ff: %Action.type.5d2 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Action.WithSelf.Op.type.cd3: type = fn_type @Action.WithSelf.Op, @Action.WithSelf(%B, %Self.67c) [symbolic]
@@ -320,6 +321,7 @@ fn InstanceC(a: A) -> C {
// CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B]
// CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(constants.%B)> [concrete = constants.%Action.type.5d2]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @A.as.Action.impl.%A.ref, @Action, @Action(constants.%B) [concrete = constants.%.c1e]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete = constants.%a.param_patt]
// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete = constants.%a.patt]
@@ -519,9 +521,9 @@ fn InstanceC(a: A) -> C {
// CHECK:STDOUT: %pattern_type.1f8: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %self.param_patt.e11: %pattern_type.1f8 = value_param_pattern [symbolic]
// CHECK:STDOUT: %self.patt.f9b: %pattern_type.1f8 = at_binding_pattern self, %self.param_patt.e11 [symbolic]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %Action.type.5d2: type = facet_type <@Action, @Action(%B)> [concrete]
// CHECK:STDOUT: %Self.581: %Action.type.5d2 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete]
// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete]
@@ -730,9 +732,9 @@ fn InstanceC(a: A) -> C {
// CHECK:STDOUT: %pattern_type.1f8: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %self.param_patt: %pattern_type.1f8 = value_param_pattern [symbolic]
// CHECK:STDOUT: %self.patt: %pattern_type.1f8 = at_binding_pattern self, %self.param_patt [symbolic]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %Action.type.5d2: type = facet_type <@Action, @Action(%B)> [concrete]
// CHECK:STDOUT: %Self.581: %Action.type.5d2 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %pattern_type.9ef: type = pattern_type %A [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.9ef = value_param_pattern [concrete]
// CHECK:STDOUT: %a.patt: %pattern_type.9ef = at_binding_pattern a, %a.param_patt [concrete]
@@ -949,6 +951,7 @@ fn InstanceC(a: A) -> C {
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %B: type = class_type @B [concrete]
// CHECK:STDOUT: %Factory.type.5e3: type = facet_type <@Factory, @Factory(%B)> [concrete]
// CHECK:STDOUT: %.b7c: <witness> = impl_self_witness %A, @Factory, @Factory(%B) [concrete]
// CHECK:STDOUT: %Factory.impl_witness: <witness> = impl_witness @A.as.Factory.impl.%Factory.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.f44: %Factory.type.5e3 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Factory.WithSelf.Make.type.264: type = fn_type @Factory.WithSelf.Make, @Factory.WithSelf(%B, %Self.9c2) [symbolic]
@@ -1008,6 +1011,7 @@ fn InstanceC(a: A) -> C {
// CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B]
// CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(constants.%B)> [concrete = constants.%Factory.type.5e3]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc14: <witness> = impl_self_witness @A.as.Factory.impl.%A.ref, @Factory, @Factory(constants.%B) [concrete = constants.%.b7c]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @Factory(%T.loc4_20.2: type) {
@@ -1262,9 +1266,9 @@ fn InstanceC(a: A) -> C {
// CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic]
// CHECK:STDOUT: %Factory.WithSelf.Make.type.cf7: type = fn_type @Factory.WithSelf.Make, @Factory.WithSelf(%T, %Self.3e3) [symbolic]
// CHECK:STDOUT: %Factory.WithSelf.Make.86c: %Factory.WithSelf.Make.type.cf7 = struct_value () [symbolic]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %Factory.type.5e3: type = facet_type <@Factory, @Factory(%B)> [concrete]
// CHECK:STDOUT: %Self.739: %Factory.type.5e3 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %.d83: Core.Form = init_form %B [concrete]
// CHECK:STDOUT: %pattern_type.e39: type = pattern_type %B [concrete]
// CHECK:STDOUT: %return.param_patt.934: %pattern_type.e39 = out_param_pattern [concrete]
@@ -1567,9 +1571,9 @@ fn InstanceC(a: A) -> C {
// CHECK:STDOUT: %.184: Core.Form = init_form %T [symbolic]
// CHECK:STDOUT: %Factory.WithSelf.Make.type.cf7: type = fn_type @Factory.WithSelf.Make, @Factory.WithSelf(%T, %Self.3e3) [symbolic]
// CHECK:STDOUT: %Factory.WithSelf.Make.86c: %Factory.WithSelf.Make.type.cf7 = struct_value () [symbolic]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %Factory.type.5e3: type = facet_type <@Factory, @Factory(%B)> [concrete]
// CHECK:STDOUT: %Self.739: %Factory.type.5e3 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.a44: Core.Form = init_form %C [concrete]
// CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete]
+2
View File
@@ -42,6 +42,7 @@ fn G(c: C) {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.ba1: <witness> = impl_self_witness %C, @HasF [concrete]
// CHECK:STDOUT: %HasF.impl_witness: <witness> = impl_witness @C.as.HasF.impl.%HasF.impl_witness_table [concrete]
// CHECK:STDOUT: %C.as.HasF.impl.F.type: type = fn_type @C.as.HasF.impl.F [concrete]
// CHECK:STDOUT: %C.as.HasF.impl.F: %C.as.HasF.impl.F.type = struct_value () [concrete]
@@ -68,6 +69,7 @@ fn G(c: C) {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc23: <witness> = impl_self_witness @C.as.HasF.impl.%C.ref, @HasF [concrete = constants.%.ba1]
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern [concrete = constants.%c.param_patt]
// CHECK:STDOUT: %c.patt: %pattern_type = at_binding_pattern c, %c.param_patt [concrete = constants.%c.patt]
@@ -112,6 +112,7 @@ fn G() {
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.8e4: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.f79: type = pattern_type %C [concrete]
// CHECK:STDOUT: %self.param_patt.dfa: %pattern_type.f79 = value_param_pattern [concrete]
@@ -121,6 +122,7 @@ fn G() {
// CHECK:STDOUT: %I.facet.947: %I.type = facet_value %C, (%I.impl_witness) [concrete]
// CHECK:STDOUT: %I.WithSelf.II.type.9c8: type = fn_type @I.WithSelf.II, @I.WithSelf(%I.facet.947) [concrete]
// CHECK:STDOUT: %I.WithSelf.II.622: %I.WithSelf.II.type.9c8 = struct_value () [concrete]
// CHECK:STDOUT: %.196: <witness> = impl_self_witness %C, @J [concrete]
// CHECK:STDOUT: %J.impl_witness: <witness> = impl_witness @C.as.J.impl.%J.impl_witness_table [concrete]
// CHECK:STDOUT: %C.as.J.impl.JJ.type: type = fn_type @C.as.J.impl.JJ [concrete]
// CHECK:STDOUT: %C.as.J.impl.JJ: %C.as.J.impl.JJ.type = struct_value () [concrete]
@@ -297,10 +299,12 @@ fn G() {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc31: <witness> = impl_self_witness @C.as.I.impl.%Self.ref, @I [concrete = constants.%.8e4]
// CHECK:STDOUT: impl_decl @C.as.J.impl [concrete] {} {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc34: <witness> = impl_self_witness @C.as.J.impl.%Self.ref, @J [concrete = constants.%.196]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -58,6 +58,7 @@ fn G() {
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness.4e9: <witness> = impl_witness @C.as.I.impl.ac9.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
@@ -95,6 +96,7 @@ fn G() {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc35: <witness> = impl_self_witness @C.as.I.impl.e10.%C.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -132,6 +134,7 @@ fn G() {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22: <witness> = impl_self_witness @C.as.I.impl.ac9.%Self.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
+32
View File
@@ -147,6 +147,7 @@ fn G(x: A) {
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %.989: <witness> = impl_self_witness %T, @HasF [symbolic]
// CHECK:STDOUT: %HasF.impl_witness.ebe: <witness> = impl_witness @T.as.HasF.impl.%HasF.impl_witness_table, @T.as.HasF.impl(%T) [symbolic]
// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic]
// CHECK:STDOUT: %self.param_patt.b7c: %pattern_type.51d = value_param_pattern [symbolic]
@@ -164,6 +165,7 @@ fn G(x: A) {
// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete]
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %.94a: <witness> = impl_self_witness %empty_struct_type, @HasF [concrete]
// CHECK:STDOUT: %HasF.impl_witness.aaf: <witness> = impl_witness @T.as.HasF.impl.%HasF.impl_witness_table, @T.as.HasF.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %T.as.HasF.impl.F.type.d06: type = fn_type @T.as.HasF.impl.F, @T.as.HasF.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %T.as.HasF.impl.F.e31: %T.as.HasF.impl.F.type.d06 = struct_value () [concrete]
@@ -203,6 +205,7 @@ fn G(x: A) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @T.as.HasF.impl.%T.ref, @HasF [symbolic = @T.as.HasF.impl.%.loc8_33 (constants.%.989)]
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%x.param_patt]
// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt]
@@ -246,6 +249,7 @@ fn G(x: A) {
// CHECK:STDOUT: generic impl @T.as.HasF.impl(%T.loc8_15.2: type) {
// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)]
// CHECK:STDOUT: %.loc8_33: <witness> = impl_self_witness %T.loc8_15.1, @HasF [symbolic = %.loc8_33 (constants.%.989)]
// CHECK:STDOUT: %HasF.impl_witness.loc8_33.2: <witness> = impl_witness %HasF.impl_witness_table, @T.as.HasF.impl(%T.loc8_15.1) [symbolic = %HasF.impl_witness.loc8_33.2 (constants.%HasF.impl_witness.ebe)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -327,6 +331,7 @@ fn G(x: A) {
// CHECK:STDOUT: specific @T.as.HasF.impl(constants.%T) {
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc8_15.1 => constants.%T
// CHECK:STDOUT: %.loc8_33 => constants.%.989
// CHECK:STDOUT: %HasF.impl_witness.loc8_33.2 => constants.%HasF.impl_witness.ebe
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -359,6 +364,7 @@ fn G(x: A) {
// CHECK:STDOUT: specific @T.as.HasF.impl(constants.%empty_struct_type) {
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc8_15.1 => constants.%empty_struct_type
// CHECK:STDOUT: %.loc8_33 => constants.%.94a
// CHECK:STDOUT: %HasF.impl_witness.loc8_33.2 => constants.%HasF.impl_witness.aaf
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -405,6 +411,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.d47: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic]
// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic]
// CHECK:STDOUT: %.1c9: <witness> = impl_self_witness %ptr.e8f, @HasF [symbolic]
// CHECK:STDOUT: %HasF.impl_witness.672: <witness> = impl_witness @ptr.as.HasF.impl.%HasF.impl_witness_table, @ptr.as.HasF.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic]
// CHECK:STDOUT: %self.param_patt.921: %pattern_type.4f4 = value_param_pattern [symbolic]
@@ -439,6 +446,7 @@ fn G(x: A) {
// CHECK:STDOUT: %return.patt.da5: %pattern_type.1cc = return_slot_pattern %return.param_patt.07a, %ptr.c28 [concrete]
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %.897: <witness> = impl_self_witness %ptr.c28, @HasF [concrete]
// CHECK:STDOUT: %HasF.impl_witness.e43: <witness> = impl_witness @ptr.as.HasF.impl.%HasF.impl_witness_table, @ptr.as.HasF.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %ptr.as.HasF.impl.F.type.03e: type = fn_type @ptr.as.HasF.impl.F, @ptr.as.HasF.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %ptr.as.HasF.impl.F.156: %ptr.as.HasF.impl.F.type.03e = struct_value () [concrete]
@@ -491,6 +499,7 @@ fn G(x: A) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T.67d)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @ptr.as.HasF.impl.%ptr.loc8_24.2, @HasF [symbolic = @ptr.as.HasF.impl.%.loc8_34 (constants.%.1c9)]
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %x.param_patt: %pattern_type.1cc = value_param_pattern [concrete = constants.%x.param_patt]
// CHECK:STDOUT: %x.patt: %pattern_type.1cc = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt]
@@ -553,6 +562,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt.d47)]
// CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T.67d)]
// CHECK:STDOUT: %ptr.loc8_24.1: type = ptr_type %T.loc8_15.1 [symbolic = %ptr.loc8_24.1 (constants.%ptr.e8f)]
// CHECK:STDOUT: %.loc8_34: <witness> = impl_self_witness %ptr.loc8_24.1, @HasF [symbolic = %.loc8_34 (constants.%.1c9)]
// CHECK:STDOUT: %HasF.impl_witness.loc8_34.2: <witness> = impl_witness %HasF.impl_witness_table, @ptr.as.HasF.impl(%T.loc8_15.1) [symbolic = %HasF.impl_witness.loc8_34.2 (constants.%HasF.impl_witness.672)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -670,6 +680,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt.d47
// CHECK:STDOUT: %T.loc8_15.1 => constants.%T.67d
// CHECK:STDOUT: %ptr.loc8_24.1 => constants.%ptr.e8f
// CHECK:STDOUT: %.loc8_34 => constants.%.1c9
// CHECK:STDOUT: %HasF.impl_witness.loc8_34.2 => constants.%HasF.impl_witness.672
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -710,6 +721,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt.d47
// CHECK:STDOUT: %T.loc8_15.1 => constants.%empty_struct_type
// CHECK:STDOUT: %ptr.loc8_24.1 => constants.%ptr.c28
// CHECK:STDOUT: %.loc8_34 => constants.%.897
// CHECK:STDOUT: %HasF.impl_witness.loc8_34.2 => constants.%HasF.impl_witness.e43
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -769,6 +781,7 @@ fn G(x: A) {
// CHECK:STDOUT: %C.1d0: type = class_type @C, @C(%T) [symbolic]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.9f4: <witness> = impl_self_witness %C.1d0, @HasF [symbolic]
// CHECK:STDOUT: %HasF.impl_witness.4e6: <witness> = impl_witness @C.as.HasF.impl.%HasF.impl_witness_table, @C.as.HasF.impl(%T) [symbolic]
// CHECK:STDOUT: %pattern_type.ebe: type = pattern_type %C.1d0 [symbolic]
// CHECK:STDOUT: %self.param_patt.5bc: %pattern_type.ebe = value_param_pattern [symbolic]
@@ -786,6 +799,7 @@ fn G(x: A) {
// CHECK:STDOUT: %x.patt: %pattern_type.2fd = at_binding_pattern x, %x.param_patt [concrete]
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %.014: <witness> = impl_self_witness %C.d8e, @HasF [concrete]
// CHECK:STDOUT: %HasF.impl_witness.f0d: <witness> = impl_witness @C.as.HasF.impl.%HasF.impl_witness_table, @C.as.HasF.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %C.as.HasF.impl.F.type.edc: type = fn_type @C.as.HasF.impl.F, @C.as.HasF.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %C.as.HasF.impl.F.612: %C.as.HasF.impl.F.type.edc = struct_value () [concrete]
@@ -836,6 +850,7 @@ fn G(x: A) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc10_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc10_15.1 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10: <witness> = impl_self_witness @C.as.HasF.impl.%C.loc10_26.2, @HasF [symbolic = @C.as.HasF.impl.%.loc10_36 (constants.%.9f4)]
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %x.param_patt: %pattern_type.2fd = value_param_pattern [concrete = constants.%x.param_patt]
// CHECK:STDOUT: %x.patt: %pattern_type.2fd = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt]
@@ -882,6 +897,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc10_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc10_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc10_15.1 (constants.%T)]
// CHECK:STDOUT: %C.loc10_26.1: type = class_type @C, @C(%T.loc10_15.1) [symbolic = %C.loc10_26.1 (constants.%C.1d0)]
// CHECK:STDOUT: %.loc10_36: <witness> = impl_self_witness %C.loc10_26.1, @HasF [symbolic = %.loc10_36 (constants.%.9f4)]
// CHECK:STDOUT: %HasF.impl_witness.loc10_36.2: <witness> = impl_witness %HasF.impl_witness_table, @C.as.HasF.impl(%T.loc10_15.1) [symbolic = %HasF.impl_witness.loc10_36.2 (constants.%HasF.impl_witness.4e6)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -987,6 +1003,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc10_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc10_15.1 => constants.%T
// CHECK:STDOUT: %C.loc10_26.1 => constants.%C.1d0
// CHECK:STDOUT: %.loc10_36 => constants.%.9f4
// CHECK:STDOUT: %HasF.impl_witness.loc10_36.2 => constants.%HasF.impl_witness.4e6
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1028,6 +1045,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc10_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc10_15.1 => constants.%empty_struct_type
// CHECK:STDOUT: %C.loc10_26.1 => constants.%C.d8e
// CHECK:STDOUT: %.loc10_36 => constants.%.014
// CHECK:STDOUT: %HasF.impl_witness.loc10_36.2 => constants.%HasF.impl_witness.f0d
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1076,6 +1094,7 @@ fn G(x: A) {
// CHECK:STDOUT: %assoc0.e9a: %HasF.assoc_type.ddf = assoc_entity element0, @HasF.WithSelf.%HasF.WithSelf.F.decl [symbolic]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %.500: <witness> = impl_self_witness %empty_struct_type, @HasF, @HasF(%T) [symbolic]
// CHECK:STDOUT: %HasF.impl_witness.932: <witness> = impl_witness @empty_struct_type.as.HasF.impl.%HasF.impl_witness_table, @empty_struct_type.as.HasF.impl(%T) [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %HasF.type.daf [symbolic]
// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete]
@@ -1096,6 +1115,7 @@ fn G(x: A) {
// CHECK:STDOUT: %HasF.WithSelf.F.0d9: %HasF.WithSelf.F.type.b94 = struct_value () [symbolic]
// CHECK:STDOUT: %HasF.assoc_type.1d0: type = assoc_entity_type @HasF, @HasF(%empty_struct_type) [concrete]
// CHECK:STDOUT: %assoc0.3f7: %HasF.assoc_type.1d0 = assoc_entity element0, @HasF.WithSelf.%HasF.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %.232: <witness> = impl_self_witness %empty_struct_type, @HasF, @HasF(%empty_struct_type) [concrete]
// CHECK:STDOUT: %HasF.impl_witness.7f1: <witness> = impl_witness @empty_struct_type.as.HasF.impl.%HasF.impl_witness_table, @empty_struct_type.as.HasF.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %HasF.type.b91 [concrete]
// CHECK:STDOUT: %empty_struct_type.as.HasF.impl.F.type.6cf: type = fn_type @empty_struct_type.as.HasF.impl.F, @empty_struct_type.as.HasF.impl(%empty_struct_type) [concrete]
@@ -1144,6 +1164,7 @@ fn G(x: A) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @empty_struct_type.as.HasF.impl.%.loc8_24.2, @HasF, @HasF(constants.%T) [symbolic = @empty_struct_type.as.HasF.impl.%.loc8_37 (constants.%.500)]
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%x.param_patt]
// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt]
@@ -1198,6 +1219,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)]
// CHECK:STDOUT: %HasF.type.loc8_35.1: type = facet_type <@HasF, @HasF(%T.loc8_15.1)> [symbolic = %HasF.type.loc8_35.1 (constants.%HasF.type.daf)]
// CHECK:STDOUT: %.loc8_37: <witness> = impl_self_witness constants.%empty_struct_type, @HasF, @HasF(%T.loc8_15.1) [symbolic = %.loc8_37 (constants.%.500)]
// CHECK:STDOUT: %HasF.impl_witness.loc8_37.2: <witness> = impl_witness %HasF.impl_witness_table, @empty_struct_type.as.HasF.impl(%T.loc8_15.1) [symbolic = %HasF.impl_witness.loc8_37.2 (constants.%HasF.impl_witness.932)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1296,6 +1318,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc8_15.1 => constants.%T
// CHECK:STDOUT: %HasF.type.loc8_35.1 => constants.%HasF.type.daf
// CHECK:STDOUT: %.loc8_37 => constants.%.500
// CHECK:STDOUT: %HasF.impl_witness.loc8_37.2 => constants.%HasF.impl_witness.932
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1351,6 +1374,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc8_15.1 => constants.%empty_struct_type
// CHECK:STDOUT: %HasF.type.loc8_35.1 => constants.%HasF.type.b91
// CHECK:STDOUT: %.loc8_37 => constants.%.232
// CHECK:STDOUT: %HasF.impl_witness.loc8_37.2 => constants.%HasF.impl_witness.7f1
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1394,6 +1418,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic]
// CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic]
// CHECK:STDOUT: %.989: <witness> = impl_self_witness %T, @HasF [symbolic]
// CHECK:STDOUT: %HasF.impl_witness: <witness> = impl_witness @T.as.HasF.impl.%HasF.impl_witness_table, @T.as.HasF.impl(%T, %U) [symbolic]
// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic]
// CHECK:STDOUT: %self.param_patt.b7c: %pattern_type.51d = value_param_pattern [symbolic]
@@ -1442,6 +1467,7 @@ fn G(x: A) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %U.loc12_24.2: type = symbolic_binding U, 1 [symbolic = %U.loc12_24.1 (constants.%U)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @T.as.HasF.impl.%T.ref, @HasF [symbolic = @T.as.HasF.impl.%.loc12_42 (constants.%.989)]
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern [concrete = constants.%x.param_patt]
// CHECK:STDOUT: %x.patt: %pattern_type.a96 = at_binding_pattern x, %x.param_patt [concrete = constants.%x.patt]
@@ -1487,6 +1513,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.loc12_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.1 (constants.%T)]
// CHECK:STDOUT: %U.patt.loc12_24.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_24.2 (constants.%U.patt)]
// CHECK:STDOUT: %U.loc12_24.1: type = symbolic_binding U, 1 [symbolic = %U.loc12_24.1 (constants.%U)]
// CHECK:STDOUT: %.loc12_42: <witness> = impl_self_witness %T.loc12_15.1, @HasF [symbolic = %.loc12_42 (constants.%.989)]
// CHECK:STDOUT: %HasF.impl_witness.loc12_42.2: <witness> = impl_witness %HasF.impl_witness_table, @T.as.HasF.impl(%T.loc12_15.1, %U.loc12_24.1) [symbolic = %HasF.impl_witness.loc12_42.2 (constants.%HasF.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1565,6 +1592,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.loc12_15.1 => constants.%T
// CHECK:STDOUT: %U.patt.loc12_24.2 => constants.%U.patt
// CHECK:STDOUT: %U.loc12_24.1 => constants.%U
// CHECK:STDOUT: %.loc12_42 => constants.%.989
// CHECK:STDOUT: %HasF.impl_witness.loc12_42.2 => constants.%HasF.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1599,6 +1627,7 @@ fn G(x: A) {
// CHECK:STDOUT: %HasF.WithSelf.F.ff7: %HasF.WithSelf.F.type.41d = struct_value () [symbolic]
// CHECK:STDOUT: %HasF.assoc_type.ddf: type = assoc_entity_type @HasF, @HasF(%T) [symbolic]
// CHECK:STDOUT: %assoc0.e9a: %HasF.assoc_type.ddf = assoc_entity element0, @HasF.WithSelf.%HasF.WithSelf.F.decl [symbolic]
// CHECK:STDOUT: %.b9d: <witness> = impl_self_witness %T, @HasF, @HasF(%T) [symbolic]
// CHECK:STDOUT: %HasF.impl_witness: <witness> = impl_witness @T.as.HasF.impl.%HasF.impl_witness_table, @T.as.HasF.impl(%T) [symbolic]
// CHECK:STDOUT: %require_complete.513: <witness> = require_complete_type %HasF.type.daf [symbolic]
// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic]
@@ -1665,6 +1694,7 @@ fn G(x: A) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc8_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @T.as.HasF.impl.%T.ref.loc8_23, @HasF, @HasF(constants.%T) [symbolic = @T.as.HasF.impl.%.loc8_36 (constants.%.b9d)]
// CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {}
// CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {}
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
@@ -1718,6 +1748,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)]
// CHECK:STDOUT: %HasF.type.loc8_34.1: type = facet_type <@HasF, @HasF(%T.loc8_15.1)> [symbolic = %HasF.type.loc8_34.1 (constants.%HasF.type.daf)]
// CHECK:STDOUT: %.loc8_36: <witness> = impl_self_witness %T.loc8_15.1, @HasF, @HasF(%T.loc8_15.1) [symbolic = %.loc8_36 (constants.%.b9d)]
// CHECK:STDOUT: %HasF.impl_witness.loc8_36.2: <witness> = impl_witness %HasF.impl_witness_table, @T.as.HasF.impl(%T.loc8_15.1) [symbolic = %HasF.impl_witness.loc8_36.2 (constants.%HasF.impl_witness)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -1832,6 +1863,7 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc8_15.2 => constants.%T.patt
// CHECK:STDOUT: %T.loc8_15.1 => constants.%T
// CHECK:STDOUT: %HasF.type.loc8_34.1 => constants.%HasF.type.daf
// CHECK:STDOUT: %.loc8_36 => constants.%.b9d
// CHECK:STDOUT: %HasF.impl_witness.loc8_36.2 => constants.%HasF.impl_witness
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -60,6 +60,7 @@ fn TestSpecific(a: A({})*) -> {}* {
// CHECK:STDOUT: %V.67d: type = symbolic_binding V, 0 [symbolic]
// CHECK:STDOUT: %A.47a1de.2: type = class_type @A, @A(%V.67d) [symbolic]
// CHECK:STDOUT: %I.type.3fe556.2: type = facet_type <@I, @I(%V.67d)> [symbolic]
// CHECK:STDOUT: %.dcb87d.1: <witness> = impl_self_witness %A.47a1de.2, @I, @I(%V.67d) [symbolic]
// CHECK:STDOUT: %I.impl_witness.25d8bb.1: <witness> = impl_witness @A.as.I.impl.%I.impl_witness_table, @A.as.I.impl(%V.67d) [symbolic]
// CHECK:STDOUT: %require_complete.45eab2.1: <witness> = require_complete_type %I.type.3fe556.2 [symbolic]
// CHECK:STDOUT: %pattern_type.44a178.1: type = pattern_type %A.47a1de.2 [symbolic]
@@ -102,6 +103,7 @@ fn TestSpecific(a: A({})*) -> {}* {
// CHECK:STDOUT: %assoc0.13b5f8.3: %I.assoc_type.b71f2b.3 = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [symbolic]
// CHECK:STDOUT: %require_complete.45eab2.2: <witness> = require_complete_type %I.type.3fe556.3 [symbolic]
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %A.47a1de.3, @I, @I(%W) [symbolic]
// CHECK:STDOUT: %.dcb87d.2: <witness> = impl_self_witness %A.47a1de.3, @I, @I(%W) [symbolic]
// CHECK:STDOUT: %I.impl_witness.25d8bb.2: <witness> = impl_witness @A.as.I.impl.%I.impl_witness_table, @A.as.I.impl(%W) [symbolic]
// CHECK:STDOUT: %A.as.I.impl.F.type.d1ec9e.2: type = fn_type @A.as.I.impl.F, @A.as.I.impl(%W) [symbolic]
// CHECK:STDOUT: %A.as.I.impl.F.d83bf5.2: %A.as.I.impl.F.type.d1ec9e.2 = struct_value () [symbolic]
@@ -123,6 +125,7 @@ fn TestSpecific(a: A({})*) -> {}* {
// CHECK:STDOUT: %I.type.81d: type = facet_type <@I, @I(%empty_struct_type)> [concrete]
// CHECK:STDOUT: %I.assoc_type.cd3: type = assoc_entity_type @I, @I(%empty_struct_type) [concrete]
// CHECK:STDOUT: %assoc0.a4c: %I.assoc_type.cd3 = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %.91b: <witness> = impl_self_witness %A.940, @I, @I(%empty_struct_type) [concrete]
// CHECK:STDOUT: %I.impl_witness.e69: <witness> = impl_witness @A.as.I.impl.%I.impl_witness_table, @A.as.I.impl(%empty_struct_type) [concrete]
// CHECK:STDOUT: %complete_type.7da: <witness> = complete_type_witness %I.type.81d [concrete]
// CHECK:STDOUT: %A.as.I.impl.F.type.a42: type = fn_type @A.as.I.impl.F, @A.as.I.impl(%empty_struct_type) [concrete]
@@ -169,6 +172,7 @@ fn TestSpecific(a: A({})*) -> {}* {
// CHECK:STDOUT: }
// CHECK:STDOUT: %V.loc12_15.2: type = symbolic_binding V, 0 [symbolic = %V.loc12_15.1 (constants.%V.67d)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: <witness> = impl_self_witness @A.as.I.impl.%A.loc12_26.2, @I, @I(constants.%V.67d) [symbolic = @A.as.I.impl.%.loc12_36 (constants.%.dcb87d.1)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic impl @A.as.I.impl(%V.loc12_15.2: type) {
@@ -176,6 +180,7 @@ fn TestSpecific(a: A({})*) -> {}* {
// CHECK:STDOUT: %V.loc12_15.1: type = symbolic_binding V, 0 [symbolic = %V.loc12_15.1 (constants.%V.67d)]
// CHECK:STDOUT: %A.loc12_26.1: type = class_type @A, @A(%V.loc12_15.1) [symbolic = %A.loc12_26.1 (constants.%A.47a1de.2)]
// CHECK:STDOUT: %I.type.loc12_34.1: type = facet_type <@I, @I(%V.loc12_15.1)> [symbolic = %I.type.loc12_34.1 (constants.%I.type.3fe556.2)]
// CHECK:STDOUT: %.loc12_36: <witness> = impl_self_witness %A.loc12_26.1, @I, @I(%V.loc12_15.1) [symbolic = %.loc12_36 (constants.%.dcb87d.1)]
// CHECK:STDOUT: %I.impl_witness.loc12_36.2: <witness> = impl_witness %I.impl_witness_table, @A.as.I.impl(%V.loc12_15.1) [symbolic = %I.impl_witness.loc12_36.2 (constants.%I.impl_witness.25d8bb.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -311,6 +316,7 @@ fn TestSpecific(a: A({})*) -> {}* {
// CHECK:STDOUT: %V.loc12_15.1 => constants.%V.67d
// CHECK:STDOUT: %A.loc12_26.1 => constants.%A.47a1de.2
// CHECK:STDOUT: %I.type.loc12_34.1 => constants.%I.type.3fe556.2
// CHECK:STDOUT: %.loc12_36 => constants.%.dcb87d.1
// CHECK:STDOUT: %I.impl_witness.loc12_36.2 => constants.%I.impl_witness.25d8bb.1
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -352,6 +358,7 @@ fn TestSpecific(a: A({})*) -> {}* {
// CHECK:STDOUT: %V.loc12_15.1 => constants.%W
// CHECK:STDOUT: %A.loc12_26.1 => constants.%A.47a1de.3
// CHECK:STDOUT: %I.type.loc12_34.1 => constants.%I.type.3fe556.3
// CHECK:STDOUT: %.loc12_36 => constants.%.dcb87d.2
// CHECK:STDOUT: %I.impl_witness.loc12_36.2 => constants.%I.impl_witness.25d8bb.2
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -365,6 +372,7 @@ fn TestSpecific(a: A({})*) -> {}* {
// CHECK:STDOUT: %V.loc12_15.1 => constants.%empty_struct_type
// CHECK:STDOUT: %A.loc12_26.1 => constants.%A.940
// CHECK:STDOUT: %I.type.loc12_34.1 => constants.%I.type.81d
// CHECK:STDOUT: %.loc12_36 => constants.%.91b
// CHECK:STDOUT: %I.impl_witness.loc12_36.2 => constants.%I.impl_witness.e69
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
+16
View File
@@ -240,6 +240,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.1e8: <witness> = impl_self_witness %C, @HasF [concrete]
// CHECK:STDOUT: %HasF.impl_witness: <witness> = impl_witness @C.as.HasF.impl.%HasF.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.866: type = pattern_type %C [concrete]
// CHECK:STDOUT: %self.param_patt.f0b: %pattern_type.866 = value_param_pattern [concrete]
@@ -271,6 +272,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = impl_self_witness @C.as.HasF.impl.%C.ref, @HasF [concrete = constants.%.1e8]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @HasF {
@@ -388,6 +390,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %.feb: <witness> = impl_self_witness %C, @HasG [concrete]
// CHECK:STDOUT: %HasG.impl_witness.992: <witness> = impl_witness @C.as.HasG.impl.%HasG.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.866: type = pattern_type %C [concrete]
// CHECK:STDOUT: %self.param_patt.f0b: %pattern_type.866 = value_param_pattern [concrete]
@@ -405,6 +408,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %pattern_type.6cd: type = pattern_type %Self.as_type.7bb [symbolic]
// CHECK:STDOUT: %self.param_patt.43c: %pattern_type.6cd = value_param_pattern [symbolic]
// CHECK:STDOUT: %self.patt.072: %pattern_type.6cd = at_binding_pattern self, %self.param_patt.43c [symbolic]
// CHECK:STDOUT: %.db9: <witness> = impl_self_witness %D, @HasF [concrete]
// CHECK:STDOUT: %HasF.impl_witness: <witness> = impl_witness @D.as.HasF.impl.%HasF.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.709: type = pattern_type %D [concrete]
// CHECK:STDOUT: %self.param_patt.68d: %pattern_type.709 = value_param_pattern [concrete]
@@ -414,6 +418,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %HasF.facet: %HasF.type = facet_value %D, (%HasF.impl_witness) [concrete]
// CHECK:STDOUT: %HasF.WithSelf.F.type.bf9: type = fn_type @HasF.WithSelf.F, @HasF.WithSelf(%HasF.facet) [concrete]
// CHECK:STDOUT: %HasF.WithSelf.F.715: %HasF.WithSelf.F.type.bf9 = struct_value () [concrete]
// CHECK:STDOUT: %.a1f: <witness> = impl_self_witness %D, @HasG [concrete]
// CHECK:STDOUT: %HasG.impl_witness.e55: <witness> = impl_witness @D.as.HasG.impl.%HasG.impl_witness_table [concrete]
// CHECK:STDOUT: %D.as.HasG.impl.G.type: type = fn_type @D.as.HasG.impl.G [concrete]
// CHECK:STDOUT: %D.as.HasG.impl.G: %D.as.HasG.impl.G.type = struct_value () [concrete]
@@ -458,15 +463,18 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%PackageA.C [concrete = constants.%C]
// CHECK:STDOUT: %HasG.ref: type = name_ref HasG, file.%HasG.decl [concrete = constants.%HasG.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc13: <witness> = impl_self_witness @C.as.HasG.impl.%C.ref, @HasG [concrete = constants.%.feb]
// CHECK:STDOUT: impl_decl @D.as.HasF.impl [concrete] {} {
// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D]
// CHECK:STDOUT: %PackageA.ref: <namespace> = name_ref PackageA, imports.%PackageA [concrete = imports.%PackageA]
// CHECK:STDOUT: %HasF.ref: type = name_ref HasF, imports.%PackageA.HasF [concrete = constants.%HasF.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @D.as.HasF.impl.%D.ref, @HasF [concrete = constants.%.db9]
// CHECK:STDOUT: impl_decl @D.as.HasG.impl [concrete] {} {
// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D]
// CHECK:STDOUT: %HasG.ref: type = name_ref HasG, file.%HasG.decl [concrete = constants.%HasG.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc23: <witness> = impl_self_witness @D.as.HasG.impl.%D.ref, @HasG [concrete = constants.%.a1f]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @HasG {
@@ -1343,6 +1351,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %Z.assoc_type: type = assoc_entity_type @Z [concrete]
// CHECK:STDOUT: %assoc0: %Z.assoc_type = assoc_entity element0, @Z.WithSelf.%Z.WithSelf.H.decl [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %.8a4: <witness> = impl_self_witness %empty_tuple.type, @Z [concrete]
// CHECK:STDOUT: %Z.impl_witness: <witness> = impl_witness @empty_tuple.type.as.Z.impl.%Z.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete]
// CHECK:STDOUT: %self.param_patt.154: %pattern_type.cb1 = value_param_pattern [concrete]
@@ -1373,6 +1382,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %.loc8_7.2: type = converted %.loc8_7.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
// CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @empty_tuple.type.as.Z.impl.%.loc8_7.2, @Z [concrete = constants.%.8a4]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Z {
@@ -1766,6 +1776,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %self.param_patt.f96: %pattern_type.615 = value_param_pattern [symbolic]
// CHECK:STDOUT: %self.patt.871: %pattern_type.615 = at_binding_pattern self, %self.param_patt.f96 [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.as_type.59a [symbolic]
// CHECK:STDOUT: %.9fa: <witness> = impl_self_witness %AnyParam.591, @Y [concrete]
// CHECK:STDOUT: %Y.impl_witness: <witness> = impl_witness @AnyParam.as.Y.impl.%Y.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.f0f: type = pattern_type %AnyParam.591 [concrete]
// CHECK:STDOUT: %self.param_patt.93d: %pattern_type.f0f = value_param_pattern [concrete]
@@ -1840,6 +1851,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %PackageHasParam.ref.loc8_52: <namespace> = name_ref PackageHasParam, imports.%PackageHasParam [concrete = imports.%PackageHasParam]
// CHECK:STDOUT: %Y.ref: type = name_ref Y, imports.%PackageHasParam.Y [concrete = constants.%Y.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @AnyParam.as.Y.impl.%AnyParam, @Y [concrete = constants.%.9fa]
// CHECK:STDOUT: %L.decl: %L.type = fn_decl @L [concrete = constants.%L] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2303,6 +2315,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %self.param_patt.f96: %pattern_type.615 = value_param_pattern [symbolic]
// CHECK:STDOUT: %self.patt.871: %pattern_type.615 = at_binding_pattern self, %self.param_patt.f96 [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.as_type.59a [symbolic]
// CHECK:STDOUT: %.cce: <witness> = impl_self_witness %AnyParam.21c, @Y [concrete]
// CHECK:STDOUT: %Y.impl_witness: <witness> = impl_witness @AnyParam.as.Y.impl.%Y.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.005: type = pattern_type %AnyParam.21c [concrete]
// CHECK:STDOUT: %self.param_patt.e35: %pattern_type.005 = value_param_pattern [concrete]
@@ -2377,6 +2390,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %PackageHasParam.ref.loc8_48: <namespace> = name_ref PackageHasParam, imports.%PackageHasParam [concrete = imports.%PackageHasParam]
// CHECK:STDOUT: %Y.ref: type = name_ref Y, imports.%PackageHasParam.Y [concrete = constants.%Y.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8: <witness> = impl_self_witness @AnyParam.as.Y.impl.%AnyParam, @Y [concrete = constants.%.cce]
// CHECK:STDOUT: %L.decl: %L.type = fn_decl @L [concrete = constants.%L] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -2837,6 +2851,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %tuple: %tuple.type.c53 = tuple_value (%Extra1.type, %Extra2.type, %Extra3.type, %Extra4.type, %Extra5.type, %Extra6.type, %Extra7.type, %Extra8.type) [concrete]
// CHECK:STDOUT: %tuple.type.d47: type = tuple_type (%Extra1.type, %Extra2.type, %Extra3.type, %Extra4.type, %Extra5.type, %Extra6.type, %Extra7.type, %Extra8.type) [concrete]
// CHECK:STDOUT: %C.279: type = class_type @C, @C(%tuple.type.d47) [concrete]
// CHECK:STDOUT: %.7ed: <witness> = impl_self_witness %C.279, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.881: type = pattern_type %C.279 [concrete]
// CHECK:STDOUT: %self.param_patt.76e: %pattern_type.881 = value_param_pattern [concrete]
@@ -2903,6 +2918,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
// CHECK:STDOUT: %C: type = class_type @C, @C(constants.%tuple.type.d47) [concrete = constants.%C.279]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc16: <witness> = impl_self_witness @C.as.I.impl.%C, @I [concrete = constants.%.7ed]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Extra1 {
@@ -51,6 +51,7 @@ fn F(c: C) -> i32 {
// CHECK:STDOUT: %I.WithSelf.F.ec6: %I.WithSelf.F.type.dcc = struct_value () [symbolic]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I.WithSelf.F.decl [concrete]
// CHECK:STDOUT: %.b7f: <witness> = impl_self_witness %C, @I [concrete]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @C.as.I.impl.%I.impl_witness_table [concrete]
// CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete]
// CHECK:STDOUT: %self.param_patt.303: %pattern_type.98b = value_param_pattern [concrete]
@@ -171,6 +172,7 @@ fn F(c: C) -> i32 {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22: <witness> = impl_self_witness @C.as.I.impl.%Self.ref, @I [concrete = constants.%.b7f]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -149,6 +149,7 @@ fn F() {
// CHECK:STDOUT: %.c26: <witness> = impl_self_witness %.Self.693, @Y, @Y(%empty_tuple.type) [symbolic_self]
// CHECK:STDOUT: %impl.elem0.85f: type = impl_witness_access %.c26, element0 [symbolic_self]
// CHECK:STDOUT: %Y_where.type.69b: type = facet_type <@Y, @Y(%empty_tuple.type) where %impl.elem0.85f = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %.6f6: <witness> = impl_self_witness %C, @Y, @Y(%empty_tuple.type) [concrete]
// CHECK:STDOUT: %Y.impl_witness: <witness> = impl_witness @C.as.Y.impl.%Y.impl_witness_table [concrete]
// CHECK:STDOUT: %Y.facet: %Y.type.1f7 = facet_value %C, (%Y.impl_witness) [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
@@ -216,6 +217,7 @@ fn F() {
// CHECK:STDOUT: %rewrite.loc58_32.2 = requirement_rewrite %impl.elem0.loc58_29.2, %.loc58_35.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc58: <witness> = impl_self_witness @C.as.Y.impl.%C.ref, @Y, @Y(constants.%empty_tuple.type) [concrete = constants.%.6f6]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -495,12 +497,15 @@ fn F() {
// CHECK:STDOUT: %.a5c: <witness> = impl_self_witness %.Self.b74, @Y, @Y(%OuterParam) [symbolic]
// CHECK:STDOUT: %impl.elem0.aaa: type = impl_witness_access %.a5c, element0 [symbolic]
// CHECK:STDOUT: %Y_where.type.cb4: type = facet_type <@Y, @Y(%OuterParam) where %impl.elem0.aaa = %empty_tuple.type> [symbolic]
// CHECK:STDOUT: %.8e6: <witness> = impl_self_witness %C.147, @Y, @Y(%OuterParam) [symbolic]
// CHECK:STDOUT: %Y.impl_witness.b49: <witness> = impl_witness @C.as.Y.impl.%Y.impl_witness_table, @C.as.Y.impl(%OuterParam) [symbolic]
// CHECK:STDOUT: %Y.facet.253: %Y.type.6da = facet_value %C.147, (%Y.impl_witness.b49) [symbolic]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %.9a5: <witness> = impl_self_witness %empty_tuple.type, @Z1 [concrete]
// CHECK:STDOUT: %Z1.impl_witness: <witness> = impl_witness @empty_tuple.type.as.Z1.impl.%Z1.impl_witness_table [concrete]
// CHECK:STDOUT: %Z1.facet: %Z1.type = facet_value %empty_tuple.type, (%Z1.impl_witness) [concrete]
// CHECK:STDOUT: %.6bb: <witness> = impl_self_witness %empty_tuple.type, @Z2 [concrete]
// CHECK:STDOUT: %Z2.impl_witness: <witness> = impl_witness @empty_tuple.type.as.Z2.impl.%Z2.impl_witness_table [concrete]
// CHECK:STDOUT: %Z2.facet: %Z2.type = facet_value %empty_tuple.type, (%Z2.impl_witness) [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
@@ -537,6 +542,7 @@ fn F() {
// CHECK:STDOUT: %.c6a: <witness> = impl_self_witness %.Self.b06, @Y, @Y(%Z1.facet) [symbolic_self]
// CHECK:STDOUT: %impl.elem0.c60: type = impl_witness_access %.c6a, element0 [symbolic_self]
// CHECK:STDOUT: %Y_where.type.0d1: type = facet_type <@Y, @Y(%Z1.facet) where %impl.elem0.c60 = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %.808: <witness> = impl_self_witness %C.5e2, @Y, @Y(%Z1.facet) [concrete]
// CHECK:STDOUT: %Y.impl_witness.5cc: <witness> = impl_witness @C.as.Y.impl.%Y.impl_witness_table, @C.as.Y.impl(%Z1.facet) [concrete]
// CHECK:STDOUT: %facet_value.3eb: %Y_where.type.8eb = facet_value %C.5e2, (%Y.impl_witness.5cc) [concrete]
// CHECK:STDOUT: %Y.lookup_impl_witness.fb3: <witness> = lookup_impl_witness %.Self.frozen.70d, @Y, @Y(%Z1.facet) [symbolic_self]
@@ -582,11 +588,13 @@ fn F() {
// CHECK:STDOUT: %.loc17_7.2: type = converted %.loc17_7.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
// CHECK:STDOUT: %Z1.ref: type = name_ref Z1, file.%Z1.decl [concrete = constants.%Z1.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc17: <witness> = impl_self_witness @empty_tuple.type.as.Z1.impl.%.loc17_7.2, @Z1 [concrete = constants.%.9a5]
// CHECK:STDOUT: impl_decl @empty_tuple.type.as.Z2.impl [concrete] {} {
// CHECK:STDOUT: %.loc18_7.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
// CHECK:STDOUT: %.loc18_7.2: type = converted %.loc18_7.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
// CHECK:STDOUT: %Z2.ref: type = name_ref Z2, file.%Z2.decl [concrete = constants.%Z2.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = impl_self_witness @empty_tuple.type.as.Z2.impl.%.loc18_7.2, @Z2 [concrete = constants.%.6bb]
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -651,6 +659,7 @@ fn F() {
// CHECK:STDOUT: %.loc14_21.4: <witness> = impl_self_witness %.Self, @Y, @Y(%OuterParam) [symbolic = %.loc14_21.4 (constants.%.a5c)]
// CHECK:STDOUT: %impl.elem0.loc14_21.4: type = impl_witness_access %.loc14_21.4, element0 [symbolic = %impl.elem0.loc14_21.4 (constants.%impl.elem0.aaa)]
// CHECK:STDOUT: %Y_where.type: type = facet_type <@Y, @Y(%OuterParam) where %impl.elem0.loc14_21.4 = constants.%empty_tuple.type> [symbolic = %Y_where.type (constants.%Y_where.type.cb4)]
// CHECK:STDOUT: %.loc14_29: <witness> = impl_self_witness %C, @Y, @Y(%OuterParam) [symbolic = %.loc14_29 (constants.%.8e6)]
// CHECK:STDOUT: %Y.impl_witness.loc14_29.2: <witness> = impl_witness %Y.impl_witness_table, @C.as.Y.impl(%OuterParam) [symbolic = %Y.impl_witness.loc14_29.2 (constants.%Y.impl_witness.b49)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
@@ -747,6 +756,7 @@ fn F() {
// CHECK:STDOUT: %rewrite.loc14_24.2 = requirement_rewrite %impl.elem0.loc14_21.2, %.loc14_27.2 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc14: <witness> = impl_self_witness @C.as.Y.impl.%C.ref, @Y, @Y(constants.%OuterParam) [symbolic = @C.as.Y.impl.%.loc14_29 (constants.%.8e6)]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type.357]
// CHECK:STDOUT: complete_type_witness = %complete_type
// CHECK:STDOUT:
@@ -907,6 +917,7 @@ fn F() {
// CHECK:STDOUT: %.loc14_21.4 => constants.%.a5c
// CHECK:STDOUT: %impl.elem0.loc14_21.4 => constants.%impl.elem0.aaa
// CHECK:STDOUT: %Y_where.type => constants.%Y_where.type.cb4
// CHECK:STDOUT: %.loc14_29 => constants.%.8e6
// CHECK:STDOUT: %Y.impl_witness.loc14_29.2 => constants.%Y.impl_witness.b49
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -960,6 +971,7 @@ fn F() {
// CHECK:STDOUT: %.loc14_21.4 => constants.%.c6a
// CHECK:STDOUT: %impl.elem0.loc14_21.4 => constants.%impl.elem0.c60
// CHECK:STDOUT: %Y_where.type => constants.%Y_where.type.0d1
// CHECK:STDOUT: %.loc14_29 => constants.%.808
// CHECK:STDOUT: %Y.impl_witness.loc14_29.2 => constants.%Y.impl_witness.5cc
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:

Some files were not shown because too many files have changed in this diff Show More