mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 15:10:12 +01:00
Facet types support rewrite (where .A =...) constraints (#4613)
* Rewrite constraints are stored in a facet type, substituted, imported, and formatted. * We now distinguish `.Self` from other symbolic bindings in two ways: * `.Self` itself now has an invalid compile time binding index (since it doesn't bind to any of the generic parameters). As a result, we no longer need to create a generic region in `handle_where.cpp`. * There is a new phase tracking values that are only symbolic because they transitively depend on `.Self`. This allows us to give the result of a `where` expression template phase as long as it doesn't use any symbolic constants other than `.Self` or other designators. * `AddConstant` has been removed from `check/context` since it was only used from `eval`. This meant less plumbing of the phase change. * Evaluation of `BindSymbolicName` now also performs substitution into its type. * Include a bit more information in some diagnostics. * `StringifyTypeExpr` outputs rewrites, which required adding support for associated entities as well. * Associated entities now have an entity name set when importing. * Adds tests for some interesting cases with rewrites and uses of `.Self` mixed with other symbolic constants. Still to do: * There is no validation that any particular type satisfies rewrite constraints. * Access to members of a facet type do not see the rewritten values. * Impls don't recognize whether associated constants have rewrites setting their values. * No support for resolving facet types. --------- Co-authored-by: Josh L <josh11b@users.noreply.github.com> Co-authored-by: Richard Smith <richard@metafoo.co.uk>
This commit is contained in:
co-authored by
Josh L
Richard Smith
parent
dc5edb88fb
commit
33110d096c
@@ -115,7 +115,8 @@ auto Context::FinishInst(SemIR::InstId inst_id, SemIR::Inst inst) -> void {
|
||||
|
||||
// If the instruction has a symbolic constant type, track that we need to
|
||||
// substitute into it.
|
||||
if (types().GetConstantId(inst.type_id()).is_symbolic()) {
|
||||
if (constant_values().DependsOnGenericParameter(
|
||||
types().GetConstantId(inst.type_id()))) {
|
||||
dep_kind |= GenericRegionStack::DependencyKind::SymbolicType;
|
||||
}
|
||||
|
||||
@@ -128,7 +129,7 @@ auto Context::FinishInst(SemIR::InstId inst_id, SemIR::Inst inst) -> void {
|
||||
|
||||
// If the constant value is symbolic, track that we need to substitute into
|
||||
// it.
|
||||
if (const_id.is_symbolic()) {
|
||||
if (constant_values().DependsOnGenericParameter(const_id)) {
|
||||
dep_kind |= GenericRegionStack::DependencyKind::SymbolicConstant;
|
||||
}
|
||||
}
|
||||
@@ -1281,7 +1282,7 @@ auto Context::TryToDefineType(SemIR::TypeId type_id,
|
||||
ResolveSpecificDefinition(*this, interface.specific_id);
|
||||
}
|
||||
}
|
||||
// TODO: Process other requirements.
|
||||
// TODO: Finish facet type resolution.
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1304,9 +1305,9 @@ auto Context::GetTypeIdForTypeConstant(SemIR::ConstantId constant_id)
|
||||
auto Context::FacetTypeFromInterface(SemIR::InterfaceId interface_id,
|
||||
SemIR::SpecificId specific_id)
|
||||
-> SemIR::FacetType {
|
||||
SemIR::FacetTypeId facet_type_id = facet_types().Add(SemIR::FacetTypeInfo{
|
||||
.impls_constraints = {{interface_id, specific_id}},
|
||||
.requirement_block_id = SemIR::InstBlockId::Invalid});
|
||||
SemIR::FacetTypeId facet_type_id = facet_types().Add(
|
||||
SemIR::FacetTypeInfo{.impls_constraints = {{interface_id, specific_id}},
|
||||
.other_requirements = false});
|
||||
return {.type_id = SemIR::TypeId::TypeType, .facet_type_id = facet_type_id};
|
||||
}
|
||||
|
||||
|
||||
@@ -162,13 +162,6 @@ class Context {
|
||||
return AddPatternInst(SemIR::LocIdAndInst(node_id, inst));
|
||||
}
|
||||
|
||||
// Adds an instruction to the constants block, returning the produced ID.
|
||||
auto AddConstant(SemIR::Inst inst, bool is_symbolic) -> SemIR::ConstantId {
|
||||
auto const_id = constants().GetOrAdd(inst, is_symbolic);
|
||||
CARBON_VLOG("AddConstant: {0}\n", inst);
|
||||
return const_id;
|
||||
}
|
||||
|
||||
// Pushes a parse tree node onto the stack, storing the SemIR::Inst as the
|
||||
// result.
|
||||
template <typename InstT>
|
||||
|
||||
+88
-24
@@ -178,6 +178,9 @@ namespace {
|
||||
enum class Phase : uint8_t {
|
||||
// Value could be entirely and concretely computed.
|
||||
Template,
|
||||
// Evaluation phase is symbolic because the expression involves specifically a
|
||||
// reference to `.Self`.
|
||||
PeriodSelfSymbolic,
|
||||
// Evaluation phase is symbolic because the expression involves a reference to
|
||||
// a symbolic binding.
|
||||
Symbolic,
|
||||
@@ -191,16 +194,20 @@ enum class Phase : uint8_t {
|
||||
} // namespace
|
||||
|
||||
// Gets the phase in which the value of a constant will become available.
|
||||
static auto GetPhase(SemIR::ConstantId constant_id) -> Phase {
|
||||
static auto GetPhase(EvalContext& eval_context, SemIR::ConstantId constant_id)
|
||||
-> Phase {
|
||||
if (!constant_id.is_constant()) {
|
||||
return Phase::Runtime;
|
||||
} else if (constant_id == SemIR::ConstantId::Error) {
|
||||
return Phase::UnknownDueToError;
|
||||
} else if (constant_id.is_template()) {
|
||||
return Phase::Template;
|
||||
} else if (eval_context.constant_values().DependsOnGenericParameter(
|
||||
constant_id)) {
|
||||
return Phase::Symbolic;
|
||||
} else {
|
||||
CARBON_CHECK(constant_id.is_symbolic());
|
||||
return Phase::Symbolic;
|
||||
return Phase::PeriodSelfSymbolic;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,14 +217,34 @@ static auto LatestPhase(Phase a, Phase b) -> Phase {
|
||||
std::max(static_cast<uint8_t>(a), static_cast<uint8_t>(b)));
|
||||
}
|
||||
|
||||
// `where` expressions using `.Self` should not be considered symbolic
|
||||
// - `Interface where .Self impls I and .A = bool` -> template
|
||||
// - `T:! type` ... `Interface where .A = T` -> symbolic, since uses `T` which
|
||||
// is symbolic and not due to `.Self`.
|
||||
static auto UpdatePhaseIgnorePeriodSelf(EvalContext& eval_context,
|
||||
SemIR::ConstantId constant_id,
|
||||
Phase* phase) {
|
||||
Phase constant_phase = GetPhase(eval_context, constant_id);
|
||||
// Since LatestPhase(x, Phase::Template) == x, this is equivalent to replacing
|
||||
// Phase::PeriodSelfSymbolic with Phase::Template.
|
||||
if (constant_phase != Phase::PeriodSelfSymbolic) {
|
||||
*phase = LatestPhase(*phase, constant_phase);
|
||||
}
|
||||
}
|
||||
|
||||
// Forms a `constant_id` describing a given evaluation result.
|
||||
static auto MakeConstantResult(Context& context, SemIR::Inst inst, Phase phase)
|
||||
-> SemIR::ConstantId {
|
||||
switch (phase) {
|
||||
case Phase::Template:
|
||||
return context.AddConstant(inst, /*is_symbolic=*/false);
|
||||
return context.constants().GetOrAdd(inst,
|
||||
SemIR::ConstantStore::IsTemplate);
|
||||
case Phase::PeriodSelfSymbolic:
|
||||
return context.constants().GetOrAdd(
|
||||
inst, SemIR::ConstantStore::IsPeriodSelfSymbolic);
|
||||
case Phase::Symbolic:
|
||||
return context.AddConstant(inst, /*is_symbolic=*/true);
|
||||
return context.constants().GetOrAdd(inst,
|
||||
SemIR::ConstantStore::IsSymbolic);
|
||||
case Phase::UnknownDueToError:
|
||||
return SemIR::ConstantId::Error;
|
||||
case Phase::Runtime:
|
||||
@@ -270,7 +297,7 @@ static auto MakeFloatResult(Context& context, SemIR::TypeId type_id,
|
||||
static auto GetConstantValue(EvalContext& eval_context, SemIR::InstId inst_id,
|
||||
Phase* phase) -> SemIR::InstId {
|
||||
auto const_id = eval_context.GetConstantValue(inst_id);
|
||||
*phase = LatestPhase(*phase, GetPhase(const_id));
|
||||
*phase = LatestPhase(*phase, GetPhase(eval_context, const_id));
|
||||
return eval_context.constant_values().GetInstId(const_id);
|
||||
}
|
||||
|
||||
@@ -279,7 +306,7 @@ static auto GetConstantValue(EvalContext& eval_context, SemIR::InstId inst_id,
|
||||
static auto GetConstantValue(EvalContext& eval_context, SemIR::TypeId type_id,
|
||||
Phase* phase) -> SemIR::TypeId {
|
||||
auto const_id = eval_context.GetConstantValue(type_id);
|
||||
*phase = LatestPhase(*phase, GetPhase(const_id));
|
||||
*phase = LatestPhase(*phase, GetPhase(eval_context, const_id));
|
||||
return eval_context.context().GetTypeIdForTypeConstant(const_id);
|
||||
}
|
||||
|
||||
@@ -395,7 +422,7 @@ static auto GetConstantValue(EvalContext& eval_context,
|
||||
}
|
||||
|
||||
// Like `GetConstantValue` but does a `FacetTypeId` -> `FacetTypeInfo`
|
||||
// conversion.
|
||||
// conversion. Does not perform canonicalization.
|
||||
static auto GetConstantFacetTypeInfo(EvalContext& eval_context,
|
||||
SemIR::FacetTypeId facet_type_id,
|
||||
Phase* phase) -> SemIR::FacetTypeInfo {
|
||||
@@ -404,8 +431,14 @@ static auto GetConstantFacetTypeInfo(EvalContext& eval_context,
|
||||
interface.specific_id =
|
||||
GetConstantValue(eval_context, interface.specific_id, phase);
|
||||
}
|
||||
std::sort(info.impls_constraints.begin(), info.impls_constraints.end());
|
||||
// TODO: Process & canonicalize other requirements.
|
||||
for (auto& rewrite : info.rewrite_constraints) {
|
||||
rewrite.lhs_const_id = eval_context.GetInContext(rewrite.lhs_const_id);
|
||||
rewrite.rhs_const_id = eval_context.GetInContext(rewrite.rhs_const_id);
|
||||
// `where` requirements using `.Self` should not be considered symbolic
|
||||
UpdatePhaseIgnorePeriodSelf(eval_context, rewrite.lhs_const_id, phase);
|
||||
UpdatePhaseIgnorePeriodSelf(eval_context, rewrite.rhs_const_id, phase);
|
||||
}
|
||||
// TODO: Process other requirements.
|
||||
return info;
|
||||
}
|
||||
|
||||
@@ -524,7 +557,8 @@ static auto PerformAggregateAccess(EvalContext& eval_context, SemIR::Inst inst)
|
||||
return eval_context.GetConstantValue(elements[index]);
|
||||
} else {
|
||||
CARBON_CHECK(phase != Phase::Template,
|
||||
"Failed to evaluate template constant {0}", inst);
|
||||
"Failed to evaluate template constant {0} arg0: {1}", inst,
|
||||
eval_context.insts().Get(access_inst.aggregate_id));
|
||||
}
|
||||
return MakeConstantResult(eval_context.context(), access_inst, phase);
|
||||
}
|
||||
@@ -1461,6 +1495,7 @@ static auto TryEvalInstInContext(EvalContext& eval_context,
|
||||
Phase phase = Phase::Template;
|
||||
SemIR::FacetTypeInfo info = GetConstantFacetTypeInfo(
|
||||
eval_context, facet_type.facet_type_id, &phase);
|
||||
info.Canonicalize();
|
||||
// TODO: Reuse `inst` if we can detect that nothing has changed.
|
||||
return MakeFacetTypeResult(eval_context.context(), info, phase);
|
||||
}
|
||||
@@ -1570,21 +1605,30 @@ static auto TryEvalInstInContext(EvalContext& eval_context,
|
||||
const auto& bind_name =
|
||||
eval_context.entity_names().Get(bind.entity_name_id);
|
||||
|
||||
// If we know which specific we're evaluating within and this is an
|
||||
// argument of that specific, its constant value is the corresponding
|
||||
// argument value.
|
||||
if (auto value =
|
||||
eval_context.GetCompileTimeBindValue(bind_name.bind_index);
|
||||
value.is_valid()) {
|
||||
return value;
|
||||
Phase phase;
|
||||
if (bind_name.name_id == SemIR::NameId::PeriodSelf) {
|
||||
phase = Phase::PeriodSelfSymbolic;
|
||||
} else {
|
||||
// If we know which specific we're evaluating within and this is an
|
||||
// argument of that specific, its constant value is the corresponding
|
||||
// argument value.
|
||||
if (auto value =
|
||||
eval_context.GetCompileTimeBindValue(bind_name.bind_index);
|
||||
value.is_valid()) {
|
||||
return value;
|
||||
}
|
||||
phase = Phase::Symbolic;
|
||||
}
|
||||
|
||||
// The constant form of a symbolic binding is an idealized form of the
|
||||
// original, with no equivalent value.
|
||||
bind.entity_name_id =
|
||||
eval_context.entity_names().MakeCanonical(bind.entity_name_id);
|
||||
bind.value_id = SemIR::InstId::Invalid;
|
||||
return MakeConstantResult(eval_context.context(), bind, Phase::Symbolic);
|
||||
if (!ReplaceFieldWithConstantValue(
|
||||
eval_context, &bind, &SemIR::BindSymbolicName::type_id, &phase)) {
|
||||
return MakeNonConstantResult(phase);
|
||||
}
|
||||
return MakeConstantResult(eval_context.context(), bind, phase);
|
||||
}
|
||||
|
||||
// These semantic wrappers don't change the constant value.
|
||||
@@ -1652,8 +1696,7 @@ static auto TryEvalInstInContext(EvalContext& eval_context,
|
||||
eval_context.insts().Get(typed_inst.period_self_id).type_id();
|
||||
SemIR::Inst base_facet_inst =
|
||||
eval_context.GetConstantValueAsInst(base_facet_type_id);
|
||||
SemIR::FacetTypeInfo info = {.requirement_block_id =
|
||||
SemIR::InstBlockId::Invalid};
|
||||
SemIR::FacetTypeInfo info = {.other_requirements = false};
|
||||
// `where` provides that the base facet is an error, `type`, or a facet
|
||||
// type.
|
||||
if (auto facet_type = base_facet_inst.TryAs<SemIR::FacetType>()) {
|
||||
@@ -1666,8 +1709,29 @@ static auto TryEvalInstInContext(EvalContext& eval_context,
|
||||
"Unexpected type_id: {0}, inst: {1}", base_facet_type_id,
|
||||
base_facet_inst);
|
||||
}
|
||||
// TODO: Combine other requirements, and then process & canonicalize them.
|
||||
info.requirement_block_id = typed_inst.requirements_id;
|
||||
if (typed_inst.requirements_id.is_valid()) {
|
||||
auto insts = eval_context.inst_blocks().Get(typed_inst.requirements_id);
|
||||
for (auto inst_id : insts) {
|
||||
if (auto rewrite =
|
||||
eval_context.insts().TryGetAs<SemIR::RequirementRewrite>(
|
||||
inst_id)) {
|
||||
SemIR::ConstantId lhs =
|
||||
eval_context.GetConstantValue(rewrite->lhs_id);
|
||||
SemIR::ConstantId rhs =
|
||||
eval_context.GetConstantValue(rewrite->rhs_id);
|
||||
// `where` requirements using `.Self` should not be considered
|
||||
// symbolic
|
||||
UpdatePhaseIgnorePeriodSelf(eval_context, lhs, &phase);
|
||||
UpdatePhaseIgnorePeriodSelf(eval_context, rhs, &phase);
|
||||
info.rewrite_constraints.push_back(
|
||||
{.lhs_const_id = lhs, .rhs_const_id = rhs});
|
||||
} else {
|
||||
// TODO: Handle other requirements
|
||||
info.other_requirements = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
info.Canonicalize();
|
||||
return MakeFacetTypeResult(eval_context.context(), info, phase);
|
||||
}
|
||||
|
||||
@@ -1675,7 +1739,7 @@ static auto TryEvalInstInContext(EvalContext& eval_context,
|
||||
// All other uses of unary `not` are non-constant.
|
||||
case CARBON_KIND(SemIR::UnaryOperatorNot typed_inst): {
|
||||
auto const_id = eval_context.GetConstantValue(typed_inst.operand_id);
|
||||
auto phase = GetPhase(const_id);
|
||||
auto phase = GetPhase(eval_context, const_id);
|
||||
if (phase == Phase::Template) {
|
||||
auto value = eval_context.insts().GetAs<SemIR::BoolLiteral>(
|
||||
eval_context.constant_values().GetInstId(const_id));
|
||||
|
||||
@@ -81,7 +81,7 @@ class RebuildGenericConstantInEvalBlockCallbacks final
|
||||
context_.insts().Get(inst_id));
|
||||
return true;
|
||||
}
|
||||
if (!const_id.is_symbolic()) {
|
||||
if (!context_.constant_values().DependsOnGenericParameter(const_id)) {
|
||||
// This instruction doesn't have a symbolic constant value, so can't
|
||||
// contain any bindings that need to be substituted.
|
||||
return true;
|
||||
@@ -104,8 +104,12 @@ class RebuildGenericConstantInEvalBlockCallbacks final
|
||||
// block.
|
||||
if (auto binding =
|
||||
context_.insts().TryGetAs<SemIR::BindSymbolicName>(inst_id)) {
|
||||
inst_id = Rebuild(inst_id, *binding);
|
||||
return true;
|
||||
if (context_.entity_names()
|
||||
.Get(binding->entity_name_id)
|
||||
.bind_index.is_valid()) {
|
||||
inst_id = Rebuild(inst_id, *binding);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (auto pattern =
|
||||
|
||||
@@ -27,22 +27,19 @@ auto HandleParseNode(Context& context, Parse::WhereOperandId node_id) -> bool {
|
||||
// Introduce a name scope so that we can remove the `.Self` entry we are
|
||||
// adding to name lookup at the end of the `where` expression.
|
||||
context.scope_stack().Push();
|
||||
// Create a generic region containing `.Self` and the constraints.
|
||||
StartGenericDecl(context);
|
||||
// Introduce `.Self` as a symbolic binding. Its type is the value of the
|
||||
// expression to the left of `where`, so `MyInterface` in the example above.
|
||||
// Because there is no equivalent non-symbolic value, we use `Invalid` as
|
||||
// the `value_id` on the `BindSymbolicName`.
|
||||
auto entity_name_id = context.entity_names().Add(
|
||||
{.name_id = SemIR::NameId::PeriodSelf,
|
||||
.parent_scope_id = context.scope_stack().PeekNameScopeId(),
|
||||
.bind_index = context.scope_stack().AddCompileTimeBinding()});
|
||||
// Invalid because this is not the parameter of a generic.
|
||||
.bind_index = SemIR::CompileTimeBindIndex::Invalid});
|
||||
auto inst_id =
|
||||
context.AddInst(SemIR::LocIdAndInst::NoLoc<SemIR::BindSymbolicName>(
|
||||
{.type_id = self_type_id,
|
||||
.entity_name_id = entity_name_id,
|
||||
// Invalid because there is no equivalent non-symbolic value.
|
||||
.value_id = SemIR::InstId::Invalid}));
|
||||
context.scope_stack().PushCompileTimeBinding(inst_id);
|
||||
auto existing =
|
||||
context.scope_stack().LookupOrAddName(SemIR::NameId::PeriodSelf, inst_id);
|
||||
// Shouldn't have any names in newly created scope.
|
||||
@@ -122,9 +119,6 @@ auto HandleParseNode(Context& /*context*/, Parse::RequirementAndId /*node_id*/)
|
||||
}
|
||||
|
||||
auto HandleParseNode(Context& context, Parse::WhereExprId node_id) -> bool {
|
||||
// Discard the generic region containing `.Self` and the constraints.
|
||||
// TODO: Decide if we want to build a `Generic` object for this.
|
||||
DiscardGenericDecl(context);
|
||||
// Remove `PeriodSelf` from name lookup, undoing the `Push` done for the
|
||||
// `WhereOperand`.
|
||||
context.scope_stack().Pop();
|
||||
|
||||
@@ -200,11 +200,14 @@ static auto BuildInterfaceWitness(
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SemIR::AssociatedConstantDecl::Kind:
|
||||
case CARBON_KIND(SemIR::AssociatedConstantDecl associated): {
|
||||
// TODO: Check we have a value for this constant in the constraint.
|
||||
context.TODO(impl.definition_id,
|
||||
"impl of interface with associated constant");
|
||||
context.TODO(
|
||||
impl.definition_id,
|
||||
"impl of interface with associated constant " +
|
||||
context.names().GetFormatted(associated.name_id).str());
|
||||
return SemIR::InstId::BuiltinErrorInst;
|
||||
}
|
||||
default:
|
||||
CARBON_CHECK(decl_id == SemIR::InstId::BuiltinErrorInst,
|
||||
"Unexpected kind of associated entity {0}", decl);
|
||||
|
||||
@@ -614,10 +614,12 @@ class ImportRefResolver : public ImportContext {
|
||||
};
|
||||
} // namespace
|
||||
|
||||
static auto AddImportRef(ImportContext& context, SemIR::InstId inst_id)
|
||||
-> SemIR::InstId {
|
||||
static auto AddImportRef(ImportContext& context, SemIR::InstId inst_id,
|
||||
SemIR::EntityNameId entity_name_id =
|
||||
SemIR::EntityNameId::Invalid) -> SemIR::InstId {
|
||||
return AddImportRef(context.local_context(),
|
||||
{.ir_id = context.import_ir_id(), .inst_id = inst_id});
|
||||
{.ir_id = context.import_ir_id(), .inst_id = inst_id},
|
||||
entity_name_id);
|
||||
}
|
||||
|
||||
static auto AddLoadedImportRef(ImportContext& context, SemIR::TypeId type_id,
|
||||
@@ -1208,6 +1210,7 @@ static auto AddNameScopeImportRefs(ImportContext& context,
|
||||
// Given a block ID for a list of associated entities of a witness, returns a
|
||||
// version localized to the current IR.
|
||||
static auto AddAssociatedEntities(ImportContext& context,
|
||||
SemIR::NameScopeId local_name_scope_id,
|
||||
SemIR::InstBlockId associated_entities_id)
|
||||
-> SemIR::InstBlockId {
|
||||
if (associated_entities_id == SemIR::InstBlockId::Empty) {
|
||||
@@ -1218,7 +1221,28 @@ static auto AddAssociatedEntities(ImportContext& context,
|
||||
llvm::SmallVector<SemIR::InstId> new_associated_entities;
|
||||
new_associated_entities.reserve(associated_entities.size());
|
||||
for (auto inst_id : associated_entities) {
|
||||
new_associated_entities.push_back(AddImportRef(context, inst_id));
|
||||
// Determine the name of the associated entity, by switching on its type.
|
||||
SemIR::NameId import_name_id = SemIR::NameId::Invalid;
|
||||
if (auto associated_const =
|
||||
context.import_insts().TryGetAs<SemIR::AssociatedConstantDecl>(
|
||||
inst_id)) {
|
||||
import_name_id = associated_const->name_id;
|
||||
} else if (auto function_decl =
|
||||
context.import_insts().TryGetAs<SemIR::FunctionDecl>(
|
||||
inst_id)) {
|
||||
auto function =
|
||||
context.import_functions().Get(function_decl->function_id);
|
||||
import_name_id = function.name_id;
|
||||
} else {
|
||||
CARBON_CHECK("Unhandled associated entity type");
|
||||
}
|
||||
auto name_id = GetLocalNameId(context, import_name_id);
|
||||
auto entity_name_id = context.local_entity_names().Add(
|
||||
{.name_id = name_id,
|
||||
.parent_scope_id = local_name_scope_id,
|
||||
.bind_index = SemIR::CompileTimeBindIndex::Invalid});
|
||||
new_associated_entities.push_back(
|
||||
AddImportRef(context, inst_id, entity_name_id));
|
||||
}
|
||||
return context.local_inst_blocks().Add(new_associated_entities);
|
||||
}
|
||||
@@ -1987,8 +2011,8 @@ static auto AddInterfaceDefinition(ImportContext& context,
|
||||
// Push a block so that we can add scoped instructions to it.
|
||||
context.local_context().inst_block_stack().Push();
|
||||
AddNameScopeImportRefs(context, import_scope, new_scope);
|
||||
new_interface.associated_entities_id =
|
||||
AddAssociatedEntities(context, import_interface.associated_entities_id);
|
||||
new_interface.associated_entities_id = AddAssociatedEntities(
|
||||
context, new_interface.scope_id, import_interface.associated_entities_id);
|
||||
new_interface.body_block_id =
|
||||
context.local_context().inst_block_stack().Pop();
|
||||
new_interface.self_param_id = self_param_id;
|
||||
@@ -2091,6 +2115,21 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
.facet_value_inst_id = facet_value_inst_id});
|
||||
}
|
||||
|
||||
static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
SemIR::FacetAccessWitness inst)
|
||||
-> ResolveResult {
|
||||
auto facet_value_inst_id =
|
||||
GetLocalConstantInstId(resolver, inst.facet_value_inst_id);
|
||||
if (resolver.HasNewWork()) {
|
||||
return ResolveResult::Retry();
|
||||
}
|
||||
|
||||
return ResolveAs<SemIR::FacetAccessWitness>(
|
||||
resolver, {.type_id = resolver.local_context().GetBuiltinType(
|
||||
SemIR::BuiltinInstKind::WitnessType),
|
||||
.facet_value_inst_id = facet_value_inst_id});
|
||||
}
|
||||
|
||||
static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
SemIR::FacetType inst) -> ResolveResult {
|
||||
CARBON_CHECK(inst.type_id == SemIR::TypeId::TypeType);
|
||||
@@ -2103,6 +2142,10 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
.first_owning_decl_id);
|
||||
GetLocalSpecificData(resolver, interface.specific_id);
|
||||
}
|
||||
for (auto rewrite : facet_type_info.rewrite_constraints) {
|
||||
GetLocalConstantId(resolver, rewrite.lhs_const_id);
|
||||
GetLocalConstantId(resolver, rewrite.rhs_const_id);
|
||||
}
|
||||
if (resolver.HasNewWork()) {
|
||||
return ResolveResult::Retry();
|
||||
}
|
||||
@@ -2135,11 +2178,19 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
{generic_interface_type.interface_id, specific_id});
|
||||
}
|
||||
}
|
||||
llvm::SmallVector<SemIR::FacetTypeInfo::RewriteConstraint>
|
||||
rewrite_constraints;
|
||||
for (auto rewrite : facet_type_info.rewrite_constraints) {
|
||||
rewrite_constraints.push_back(
|
||||
{.lhs_const_id = GetLocalConstantId(resolver, rewrite.lhs_const_id),
|
||||
.rhs_const_id = GetLocalConstantId(resolver, rewrite.rhs_const_id)});
|
||||
}
|
||||
// TODO: Also process the other requirements.
|
||||
SemIR::FacetTypeId facet_type_id =
|
||||
resolver.local_facet_types().Add(SemIR::FacetTypeInfo{
|
||||
.impls_constraints = impls_constraints,
|
||||
.requirement_block_id = SemIR::InstBlockId::Invalid});
|
||||
.rewrite_constraints = rewrite_constraints,
|
||||
.other_requirements = facet_type_info.other_requirements});
|
||||
return ResolveAs<SemIR::FacetType>(
|
||||
resolver,
|
||||
{.type_id = SemIR::TypeId::TypeType, .facet_type_id = facet_type_id});
|
||||
@@ -2176,6 +2227,22 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
.elements_id = elements_id});
|
||||
}
|
||||
|
||||
static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
SemIR::InterfaceWitnessAccess inst)
|
||||
-> ResolveResult {
|
||||
auto type_id = GetLocalConstantId(resolver, inst.type_id);
|
||||
auto witness_id = GetLocalConstantInstId(resolver, inst.witness_id);
|
||||
if (resolver.HasNewWork()) {
|
||||
return ResolveResult::Retry();
|
||||
}
|
||||
|
||||
return ResolveAs<SemIR::InterfaceWitnessAccess>(
|
||||
resolver,
|
||||
{.type_id = resolver.local_context().GetTypeIdForTypeConstant(type_id),
|
||||
.witness_id = witness_id,
|
||||
.index = inst.index});
|
||||
}
|
||||
|
||||
static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
SemIR::IntValue inst) -> ResolveResult {
|
||||
auto type_id = GetLocalConstantId(resolver, inst.type_id);
|
||||
@@ -2404,6 +2471,9 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver,
|
||||
case CARBON_KIND(SemIR::FacetAccessType inst): {
|
||||
return TryResolveTypedInst(resolver, inst);
|
||||
}
|
||||
case CARBON_KIND(SemIR::FacetAccessWitness inst): {
|
||||
return TryResolveTypedInst(resolver, inst);
|
||||
}
|
||||
case CARBON_KIND(SemIR::FacetType inst): {
|
||||
return TryResolveTypedInst(resolver, inst);
|
||||
}
|
||||
@@ -2437,6 +2507,9 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver,
|
||||
case CARBON_KIND(SemIR::InterfaceWitness inst): {
|
||||
return TryResolveTypedInst(resolver, inst);
|
||||
}
|
||||
case CARBON_KIND(SemIR::InterfaceWitnessAccess inst): {
|
||||
return TryResolveTypedInst(resolver, inst);
|
||||
}
|
||||
case CARBON_KIND(SemIR::IntValue inst): {
|
||||
return TryResolveTypedInst(resolver, inst);
|
||||
}
|
||||
|
||||
@@ -103,6 +103,14 @@ static auto PushOperand(Context& context, Worklist& worklist,
|
||||
PushOperand(context, worklist, SemIR::IdKind::For<SemIR::SpecificId>,
|
||||
interface.specific_id.index);
|
||||
}
|
||||
for (auto rewrite : facet_type_info.rewrite_constraints) {
|
||||
auto lhs_inst_id =
|
||||
context.constant_values().GetInstId(rewrite.lhs_const_id);
|
||||
auto rhs_inst_id =
|
||||
context.constant_values().GetInstId(rewrite.rhs_const_id);
|
||||
worklist.Push(lhs_inst_id);
|
||||
worklist.Push(rhs_inst_id);
|
||||
}
|
||||
// TODO: Process other requirements as well.
|
||||
break;
|
||||
}
|
||||
@@ -191,6 +199,13 @@ static auto PopOperand(Context& context, Worklist& worklist, SemIR::IdKind kind,
|
||||
context.facet_types().Get(SemIR::FacetTypeId(arg));
|
||||
SemIR::FacetTypeInfo new_facet_type_info = old_facet_type_info;
|
||||
// Since these were added to a stack, we get them back in reverse order.
|
||||
for (auto i : llvm::reverse(
|
||||
llvm::seq(old_facet_type_info.rewrite_constraints.size()))) {
|
||||
auto rhs_id = context.constant_values().Get(worklist.Pop());
|
||||
auto lhs_id = context.constant_values().Get(worklist.Pop());
|
||||
new_facet_type_info.rewrite_constraints[i].rhs_const_id = rhs_id;
|
||||
new_facet_type_info.rewrite_constraints[i].lhs_const_id = lhs_id;
|
||||
}
|
||||
for (auto i : llvm::reverse(
|
||||
llvm::seq(old_facet_type_info.impls_constraints.size()))) {
|
||||
auto specific_id = PopOperand(
|
||||
@@ -199,6 +214,7 @@ static auto PopOperand(Context& context, Worklist& worklist, SemIR::IdKind kind,
|
||||
new_facet_type_info.impls_constraints[i].specific_id =
|
||||
SemIR::SpecificId(specific_id);
|
||||
}
|
||||
new_facet_type_info.Canonicalize();
|
||||
return context.facet_types().Add(new_facet_type_info).index;
|
||||
}
|
||||
default:
|
||||
|
||||
@@ -127,13 +127,13 @@ fn Foo[T:! type](n: T) -> (T, ()) {
|
||||
// CHECK:STDOUT: 'inst+38': templateConstant(inst+38)
|
||||
// CHECK:STDOUT: 'inst+39': templateConstant(inst+38)
|
||||
// CHECK:STDOUT: symbolic_constants:
|
||||
// CHECK:STDOUT: symbolicConstant0: {inst: inst+2, generic: generic<invalid>, index: genericInst<invalid>}
|
||||
// CHECK:STDOUT: symbolicConstant1: {inst: inst+4, generic: generic<invalid>, index: genericInst<invalid>}
|
||||
// CHECK:STDOUT: symbolicConstant2: {inst: inst+16, generic: generic<invalid>, index: genericInst<invalid>}
|
||||
// CHECK:STDOUT: symbolicConstant3: {inst: inst+2, generic: generic0, index: genericInstInDecl0}
|
||||
// CHECK:STDOUT: symbolicConstant4: {inst: inst+4, generic: generic0, index: genericInstInDecl1}
|
||||
// CHECK:STDOUT: symbolicConstant5: {inst: inst+16, generic: generic0, index: genericInstInDecl2}
|
||||
// CHECK:STDOUT: symbolicConstant6: {inst: inst+30, generic: generic<invalid>, index: genericInst<invalid>}
|
||||
// CHECK:STDOUT: symbolicConstant0: {inst: inst+2, generic: generic<invalid>, index: genericInst<invalid>, .Self: false}
|
||||
// CHECK:STDOUT: symbolicConstant1: {inst: inst+4, generic: generic<invalid>, index: genericInst<invalid>, .Self: false}
|
||||
// CHECK:STDOUT: symbolicConstant2: {inst: inst+16, generic: generic<invalid>, index: genericInst<invalid>, .Self: false}
|
||||
// CHECK:STDOUT: symbolicConstant3: {inst: inst+2, generic: generic0, index: genericInstInDecl0, .Self: false}
|
||||
// CHECK:STDOUT: symbolicConstant4: {inst: inst+4, generic: generic0, index: genericInstInDecl1, .Self: false}
|
||||
// CHECK:STDOUT: symbolicConstant5: {inst: inst+16, generic: generic0, index: genericInstInDecl2, .Self: false}
|
||||
// CHECK:STDOUT: symbolicConstant6: {inst: inst+30, generic: generic<invalid>, index: genericInst<invalid>, .Self: false}
|
||||
// CHECK:STDOUT: inst_blocks:
|
||||
// CHECK:STDOUT: empty: {}
|
||||
// CHECK:STDOUT: exports:
|
||||
|
||||
+5
-9
@@ -17,11 +17,9 @@ var v: C(0);
|
||||
// CHECK:STDOUT: --- fail_self_param.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %x: <error> = bind_symbolic_name x, 0 [symbolic]
|
||||
// CHECK:STDOUT: %x.patt: <error> = symbolic_binding_pattern x, 0 [symbolic]
|
||||
// CHECK:STDOUT: %C.type: type = generic_class_type @C [template]
|
||||
// CHECK:STDOUT: %C.generic: %C.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %C: type = class_type @C, @C(%x) [symbolic]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [template]
|
||||
// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [template]
|
||||
@@ -47,7 +45,7 @@ var v: C(0);
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %self.ref: <error> = name_ref self, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %x.param: <error> = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %x.loc14_22.1: <error> = bind_symbolic_name x, 0, %x.param [symbolic = %x.loc14_22.2 (constants.%x)]
|
||||
// CHECK:STDOUT: %x: <error> = bind_symbolic_name x, 0, %x.param [template = <error>]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %C.ref: %C.type = name_ref C, %C.decl [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [template = constants.%int_0]
|
||||
@@ -55,8 +53,7 @@ var v: C(0);
|
||||
// CHECK:STDOUT: %v: ref <error> = bind_name v, %v.var
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic class @C(%x.loc14_22.1: <error>) {
|
||||
// CHECK:STDOUT: %x.loc14_22.2: <error> = bind_symbolic_name x, 0 [symbolic = %x.loc14_22.2 (constants.%x)]
|
||||
// CHECK:STDOUT: generic class @C(%x: <error>) {
|
||||
// CHECK:STDOUT: %x.patt.loc14_22.2: <error> = symbolic_binding_pattern x, 0 [symbolic = %x.patt.loc14_22.2 (constants.%x.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
@@ -65,13 +62,12 @@ var v: C(0);
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [template = constants.%complete_type]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = constants.%C
|
||||
// CHECK:STDOUT: .Self = <error>
|
||||
// CHECK:STDOUT: complete_type_witness = %complete_type
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @C(constants.%x) {
|
||||
// CHECK:STDOUT: %x.loc14_22.2 => constants.%x
|
||||
// CHECK:STDOUT: %x.patt.loc14_22.2 => constants.%x
|
||||
// CHECK:STDOUT: specific @C(<error>) {
|
||||
// CHECK:STDOUT: %x.patt.loc14_22.2 => <error>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+137
-147
@@ -259,20 +259,18 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.10 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -290,18 +288,16 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.27 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -371,35 +367,35 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %import_ref.4 = import_ref Main//foo, inst+73, unloaded
|
||||
// CHECK:STDOUT: %import_ref.5: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Main//foo, inst+74, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)]
|
||||
// CHECK:STDOUT: %import_ref.6 = import_ref Main//foo, inst+75, unloaded
|
||||
// CHECK:STDOUT: %import_ref.7: type = import_ref Main//foo, inst+116, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Main//foo, inst+117, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.9: <witness> = import_ref Main//foo, inst+118, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.10 = import_ref Main//foo, inst+89, unloaded
|
||||
// CHECK:STDOUT: %import_ref.11: type = import_ref Main//foo, inst+142, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Main//foo, inst+143, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.13 = import_ref Main//foo, inst+144, unloaded
|
||||
// CHECK:STDOUT: %import_ref.14: type = import_ref Main//foo, inst+167, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+168, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.16 = import_ref Main//foo, inst+169, unloaded
|
||||
// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+195, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+196, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+197, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Main//foo, inst+223, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Main//foo, inst+224, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+225, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24: type = import_ref Main//foo, inst+229, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+230, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.26 = import_ref Main//foo, inst+231, unloaded
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+245, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28: type = import_ref Main//foo, inst+280, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Main//foo, inst+281, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+282, unloaded
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+305, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+306, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+307, unloaded
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+333, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+334, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+335, unloaded
|
||||
// CHECK:STDOUT: %import_ref.7: type = import_ref Main//foo, inst+114, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Main//foo, inst+115, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.9: <witness> = import_ref Main//foo, inst+116, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.10 = import_ref Main//foo, inst+88, unloaded
|
||||
// CHECK:STDOUT: %import_ref.11: type = import_ref Main//foo, inst+140, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Main//foo, inst+141, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.13 = import_ref Main//foo, inst+142, unloaded
|
||||
// CHECK:STDOUT: %import_ref.14: type = import_ref Main//foo, inst+165, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+166, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.16 = import_ref Main//foo, inst+167, unloaded
|
||||
// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+193, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+194, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+195, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Main//foo, inst+221, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Main//foo, inst+222, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+223, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24: type = import_ref Main//foo, inst+227, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+228, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.26 = import_ref Main//foo, inst+229, unloaded
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+242, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28: type = import_ref Main//foo, inst+276, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Main//foo, inst+277, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+278, unloaded
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+301, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+302, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+303, unloaded
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+329, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+330, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+331, unloaded
|
||||
// CHECK:STDOUT: %import_ref.38: <witness> = import_ref Main//foo, inst+55, loaded [template = constants.%complete_type.2]
|
||||
// CHECK:STDOUT: %import_ref.39 = import_ref Main//foo, inst+25, unloaded
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Main//foo, inst+42, unloaded
|
||||
@@ -444,7 +440,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -464,7 +460,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -651,10 +647,10 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -696,13 +692,13 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -806,7 +802,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -849,7 +845,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -929,11 +925,11 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -976,7 +972,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
@@ -1062,7 +1058,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.13
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.13
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5
|
||||
@@ -1121,7 +1117,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1 = import_ref Main//foo, inst+9, unloaded
|
||||
// CHECK:STDOUT: %import_ref.2: %CompleteClass.type = import_ref Main//foo, inst+20, loaded [template = constants.%CompleteClass.generic]
|
||||
// CHECK:STDOUT: %import_ref.3: %F.type.3 = import_ref Main//foo, inst+377, loaded [template = constants.%F.3]
|
||||
// CHECK:STDOUT: %import_ref.3: %F.type.3 = import_ref Main//foo, inst+373, loaded [template = constants.%F.3]
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .Int = %import_ref.4
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
@@ -1325,18 +1321,16 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.7) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.4: type = assoc_entity_type %As.type.2, %Convert.type.8 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.5: %Convert.assoc_type.4 = assoc_entity element0, imports.%import_ref.34 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.9) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.10: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.10: %Convert.type.10 = struct_value () [symbolic]
|
||||
@@ -1357,7 +1351,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1 = import_ref Main//foo, inst+9, unloaded
|
||||
// CHECK:STDOUT: %import_ref.2: %CompleteClass.type = import_ref Main//foo, inst+20, loaded [template = constants.%CompleteClass.generic]
|
||||
// CHECK:STDOUT: %import_ref.3: %F.type.3 = import_ref Main//foo, inst+377, loaded [template = constants.%F.3]
|
||||
// CHECK:STDOUT: %import_ref.3: %F.type.3 = import_ref Main//foo, inst+373, loaded [template = constants.%F.3]
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .Int = %import_ref.8
|
||||
// CHECK:STDOUT: .ImplicitAs = %import_ref.9
|
||||
@@ -1368,34 +1362,34 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Main//foo, inst+25, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6 = import_ref Main//foo, inst+42, unloaded
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref Main//foo, inst+51, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+116, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Main//foo, inst+117, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Main//foo, inst+118, unloaded
|
||||
// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+142, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+143, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.5)]
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+144, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21: type = import_ref Main//foo, inst+167, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.22: type = import_ref Main//foo, inst+168, loaded [template = constants.%ImplicitAs.type.6]
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+169, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+195, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Main//foo, inst+196, loaded [template = constants.%ImplicitAs.type.6]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+197, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Main//foo, inst+223, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29 = import_ref Main//foo, inst+224, unloaded
|
||||
// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+225, unloaded
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+229, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+230, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+231, unloaded
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Main//foo, inst+245, unloaded
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+280, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+281, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+282, unloaded
|
||||
// CHECK:STDOUT: %import_ref.38: type = import_ref Main//foo, inst+305, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.39: type = import_ref Main//foo, inst+306, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Main//foo, inst+307, unloaded
|
||||
// CHECK:STDOUT: %import_ref.42: type = import_ref Main//foo, inst+333, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.43: type = import_ref Main//foo, inst+334, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.44 = import_ref Main//foo, inst+335, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+114, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Main//foo, inst+115, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Main//foo, inst+116, unloaded
|
||||
// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+140, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+141, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.5)]
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+142, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21: type = import_ref Main//foo, inst+165, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.22: type = import_ref Main//foo, inst+166, loaded [template = constants.%ImplicitAs.type.6]
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+167, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+193, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Main//foo, inst+194, loaded [template = constants.%ImplicitAs.type.6]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+195, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Main//foo, inst+221, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29 = import_ref Main//foo, inst+222, unloaded
|
||||
// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+223, unloaded
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+227, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+228, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+229, unloaded
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Main//foo, inst+242, unloaded
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+276, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+277, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+278, unloaded
|
||||
// CHECK:STDOUT: %import_ref.38: type = import_ref Main//foo, inst+301, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.39: type = import_ref Main//foo, inst+302, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Main//foo, inst+303, unloaded
|
||||
// CHECK:STDOUT: %import_ref.42: type = import_ref Main//foo, inst+329, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.43: type = import_ref Main//foo, inst+330, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.44 = import_ref Main//foo, inst+331, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -1417,7 +1411,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.8)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.8) = struct_value () [symbolic = %Convert (constants.%Convert.8)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.8) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.4)]
|
||||
@@ -1645,13 +1639,13 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -1841,11 +1835,11 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -1888,7 +1882,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.12
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.12
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5
|
||||
@@ -1936,20 +1930,18 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.10 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -1967,18 +1959,16 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.27 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -2008,7 +1998,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1: %Class.type = import_ref Main//foo, inst+9, loaded [template = constants.%Class.generic]
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Main//foo, inst+20, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3 = import_ref Main//foo, inst+377, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3 = import_ref Main//foo, inst+373, unloaded
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
// CHECK:STDOUT: import Core//prelude/...
|
||||
@@ -2016,35 +2006,35 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %import_ref.4 = import_ref Main//foo, inst+73, unloaded
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Main//foo, inst+74, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6 = import_ref Main//foo, inst+75, unloaded
|
||||
// CHECK:STDOUT: %import_ref.7: type = import_ref Main//foo, inst+116, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Main//foo, inst+117, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.9 = import_ref Main//foo, inst+118, unloaded
|
||||
// CHECK:STDOUT: %import_ref.10 = import_ref Main//foo, inst+89, unloaded
|
||||
// CHECK:STDOUT: %import_ref.11: type = import_ref Main//foo, inst+142, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Main//foo, inst+143, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.13 = import_ref Main//foo, inst+144, unloaded
|
||||
// CHECK:STDOUT: %import_ref.14: type = import_ref Main//foo, inst+167, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+168, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.16 = import_ref Main//foo, inst+169, unloaded
|
||||
// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+195, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+196, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+197, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Main//foo, inst+223, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Main//foo, inst+224, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+225, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24: type = import_ref Main//foo, inst+229, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+230, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.26 = import_ref Main//foo, inst+231, unloaded
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+245, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28: type = import_ref Main//foo, inst+280, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Main//foo, inst+281, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+282, unloaded
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+305, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+306, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+307, unloaded
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+333, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+334, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+335, unloaded
|
||||
// CHECK:STDOUT: %import_ref.7: type = import_ref Main//foo, inst+114, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Main//foo, inst+115, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.9 = import_ref Main//foo, inst+116, unloaded
|
||||
// CHECK:STDOUT: %import_ref.10 = import_ref Main//foo, inst+88, unloaded
|
||||
// CHECK:STDOUT: %import_ref.11: type = import_ref Main//foo, inst+140, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Main//foo, inst+141, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.13 = import_ref Main//foo, inst+142, unloaded
|
||||
// CHECK:STDOUT: %import_ref.14: type = import_ref Main//foo, inst+165, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+166, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.16 = import_ref Main//foo, inst+167, unloaded
|
||||
// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+193, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+194, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+195, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Main//foo, inst+221, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Main//foo, inst+222, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+223, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24: type = import_ref Main//foo, inst+227, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+228, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.26 = import_ref Main//foo, inst+229, unloaded
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+242, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28: type = import_ref Main//foo, inst+276, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Main//foo, inst+277, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+278, unloaded
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+301, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+302, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+303, unloaded
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+329, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+330, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+331, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -2072,7 +2062,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -2092,7 +2082,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -2263,10 +2253,10 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -2308,13 +2298,13 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -2396,7 +2386,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -2439,7 +2429,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -2519,11 +2509,11 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -2566,7 +2556,7 @@ class Class(U:! type) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
|
||||
+1
-1
@@ -330,5 +330,5 @@ fn Run() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F[%self.param_patt: %ForwardDeclared.1]();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @G[addr <unexpected>.inst+403: %ptr.3]();
|
||||
// CHECK:STDOUT: fn @G[addr <unexpected>.inst+399: %ptr.3]();
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+28
-32
@@ -579,15 +579,13 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %int_1.1: Core.IntLiteral = int_value 1 [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @As(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %As.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.6 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%i32)> [template]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.1, @As(%i32) [template]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [template]
|
||||
@@ -595,17 +593,15 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %assoc0.2: %Convert.assoc_type.2 = assoc_entity element0, imports.%import_ref.6 [template]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.7 [symbolic]
|
||||
// CHECK:STDOUT: %Add.type: type = facet_type <@Add> [template]
|
||||
// CHECK:STDOUT: %Self.3: %Add.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %Add.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [template]
|
||||
// CHECK:STDOUT: %Self.5: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.2, @ImplicitAs(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.3: %Convert.type.3 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.5 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.3 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.4: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.23 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.4: type = fn_type @Convert.2, @ImplicitAs(%i32) [template]
|
||||
// CHECK:STDOUT: %Convert.4: %Convert.type.4 = struct_value () [template]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.4: type = assoc_entity_type %ImplicitAs.type.3, %Convert.type.4 [template]
|
||||
@@ -624,7 +620,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %Convert.bound.2: <bound method> = bound_method %int_2.1, %Convert.6 [template]
|
||||
// CHECK:STDOUT: %int_2.2: %i32 = int_value 2 [template]
|
||||
// CHECK:STDOUT: %Op.type.1: type = fn_type @Op.1 [template]
|
||||
// CHECK:STDOUT: %Self.as_type.5: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Op.assoc_type: type = assoc_entity_type %Add.type, %Op.type.1 [template]
|
||||
// CHECK:STDOUT: %assoc0.7: %Op.assoc_type = assoc_entity element0, imports.%import_ref.30 [template]
|
||||
// CHECK:STDOUT: %Op.type.2: type = fn_type @Op.2 [template]
|
||||
@@ -739,7 +735,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @As(%T) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -766,7 +762,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.5)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.3)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.2, @ImplicitAs(%T) [symbolic = %Convert.type (constants.%Convert.type.3)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.3) = struct_value () [symbolic = %Convert (constants.%Convert.3)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.3) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -802,31 +798,31 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Int(%N.param_patt: Core.IntLiteral) -> type = "int.make_type_signed";
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self.1: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self.1: %As.type.2) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%T (%T);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.2(constants.%T: type, constants.%Self.4: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.2(constants.%T: type, constants.%Self.3: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.5)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.3)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.2.%Self.as_type (%Self.as_type.3)]() -> @Convert.2.%T (%T);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.2.%Self.as_type (%Self.as_type.2)]() -> @Convert.2.%T (%T);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Convert.3[%self.param_patt: Core.IntLiteral]() -> %i32 = "int.convert_checked";
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Op.1(constants.%Self.3: %Add.type) {
|
||||
// CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.3)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.5)]
|
||||
// CHECK:STDOUT: generic fn @Op.1(constants.%Self.2: %Add.type) {
|
||||
// CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Op.1.%Self.as_type (%Self.as_type.5)](%other.param_patt: @Op.1.%Self.as_type (%Self.as_type.5)) -> @Op.1.%Self.as_type (%Self.as_type.5);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Op.1.%Self.as_type (%Self.as_type.3)](%other.param_patt: @Op.1.%Self.as_type (%Self.as_type.3)) -> @Op.1.%Self.as_type (%Self.as_type.3);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Op.2[%self.param_patt: %i32](%other.param_patt: %i32) -> %i32 = "int.sadd";
|
||||
@@ -905,7 +901,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @As(constants.%i32) {
|
||||
@@ -914,7 +910,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.2
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.2
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -932,7 +928,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.4
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.4
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
@@ -949,11 +945,11 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%T, constants.%Self.4) {
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%T, constants.%Self.3) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @ImplicitAs(Core.IntLiteral) {
|
||||
@@ -962,15 +958,15 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5
|
||||
// CHECK:STDOUT: %assoc0 => constants.%assoc0.6
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Op.1(constants.%Self.3) {
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.5
|
||||
// CHECK:STDOUT: specific @Op.1(constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.3
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -78,8 +78,8 @@ class C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = constants.%C
|
||||
// CHECK:STDOUT: .n = <unexpected>.inst+373.loc37_8
|
||||
// CHECK:STDOUT: complete_type_witness = <unexpected>.inst+375.loc38_1
|
||||
// CHECK:STDOUT: .n = <unexpected>.inst+369.loc37_8
|
||||
// CHECK:STDOUT: complete_type_witness = <unexpected>.inst+371.loc38_1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @__global_init() {
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
interface I { let T:! type; }
|
||||
|
||||
// CHECK:STDERR: fail_impl_bad_assoc_const.carbon:[[@LINE+3]]:1: error: semantics TODO: `impl of interface with associated constant` [SemanticsTodo]
|
||||
// CHECK:STDERR: fail_impl_bad_assoc_const.carbon:[[@LINE+3]]:1: error: semantics TODO: `impl of interface with associated constant T` [SemanticsTodo]
|
||||
// CHECK:STDERR: impl bool as I {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~
|
||||
impl bool as I {}
|
||||
|
||||
@@ -120,7 +120,7 @@ impl f64 as type where .Self impls type {}
|
||||
// CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [template]
|
||||
// CHECK:STDOUT: %Float.type: type = fn_type @Float [template]
|
||||
// CHECK:STDOUT: %Float: %Float.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %type_where: type = facet_type <type where TODO> [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -142,7 +142,7 @@ impl f64 as type where .Self impls type {}
|
||||
// CHECK:STDOUT: %float.make_type: init type = call constants.%Float(%int_64) [template = f64]
|
||||
// CHECK:STDOUT: %.loc10_6.1: type = value_of_initializer %float.make_type [template = f64]
|
||||
// CHECK:STDOUT: %.loc10_6.2: type = converted %float.make_type, %.loc10_6.1 [template = f64]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.loc10_18: type = where_expr %.Self [template = constants.%type_where] {
|
||||
// CHECK:STDOUT: requirement_impls %.Self.ref, type
|
||||
|
||||
+12
-12
@@ -10,7 +10,7 @@
|
||||
|
||||
interface I { let T:! type; }
|
||||
|
||||
// CHECK:STDERR: fail_todo_impl_assoc_const.carbon:[[@LINE+3]]:1: error: semantics TODO: `impl of interface with associated constant` [SemanticsTodo]
|
||||
// CHECK:STDERR: fail_todo_impl_assoc_const.carbon:[[@LINE+3]]:1: error: semantics TODO: `impl of interface with associated constant T` [SemanticsTodo]
|
||||
// CHECK:STDERR: impl bool as I where .T = bool {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
impl bool as I where .T = bool {}
|
||||
@@ -18,16 +18,16 @@ impl bool as I where .T = bool {}
|
||||
// CHECK:STDOUT: --- fail_todo_impl_assoc_const.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template]
|
||||
// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type.1, type [template]
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I> [template]
|
||||
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type, type [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @I.%T [template]
|
||||
// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template]
|
||||
// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = bool> [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -44,28 +44,28 @@ impl bool as I where .T = bool {}
|
||||
// CHECK:STDOUT: .I = %I.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type.1] {} {}
|
||||
// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {}
|
||||
// CHECK:STDOUT: impl_decl @impl [template] {} {
|
||||
// CHECK:STDOUT: %bool.make_type.loc16_6: init type = call constants.%Bool() [template = bool]
|
||||
// CHECK:STDOUT: %.loc16_6.1: type = value_of_initializer %bool.make_type.loc16_6 [template = bool]
|
||||
// CHECK:STDOUT: %.loc16_6.2: type = converted %bool.make_type.loc16_6, %.loc16_6.1 [template = bool]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type]
|
||||
// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %T.ref: %assoc_type = name_ref T, @I.%assoc0 [template = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %bool.make_type.loc16_27: init type = call constants.%Bool() [template = bool]
|
||||
// CHECK:STDOUT: %.loc16_27.1: type = value_of_initializer %bool.make_type.loc16_27 [template = bool]
|
||||
// CHECK:STDOUT: %.loc16_27.2: type = converted %bool.make_type.loc16_27, %.loc16_27.1 [template = bool]
|
||||
// CHECK:STDOUT: %.loc16_16: type = where_expr %.Self [template = constants.%I.type.2] {
|
||||
// CHECK:STDOUT: %.loc16_16: type = where_expr %.Self [template = constants.%I_where.type] {
|
||||
// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc16_27.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @I {
|
||||
// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %T: type = assoc_const_decl T [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %T [template = constants.%assoc0]
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+20
-36
@@ -1163,8 +1163,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %X.1: %T = bind_symbolic_name X, 1 [symbolic]
|
||||
// CHECK:STDOUT: %X.2: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic]
|
||||
// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %X.patt.2: %T = symbolic_binding_pattern X, 1 [symbolic]
|
||||
// CHECK:STDOUT: %AnyParam.2: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.1, %GenericInterface.generic) [template]
|
||||
@@ -1256,10 +1255,10 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT: witness = %interface
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic class @AnyParam(constants.%T: type, constants.%X.2: @AnyParam.%T (%T)) {
|
||||
// CHECK:STDOUT: generic class @AnyParam(constants.%T: type, constants.%X: %T) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic = %X (constants.%X.1)]
|
||||
// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)]
|
||||
// CHECK:STDOUT: %X.patt: %T = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
@@ -1313,18 +1312,11 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT: %U.patt.loc6_28.2 => constants.%U
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X.1) {
|
||||
// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: %X => constants.%X.1
|
||||
// CHECK:STDOUT: %X.patt => constants.%X.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X.2) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: %X => constants.%X.2
|
||||
// CHECK:STDOUT: %X.patt => constants.%X.2
|
||||
// CHECK:STDOUT: %X => constants.%X
|
||||
// CHECK:STDOUT: %X.patt => constants.%X
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AnyParam(constants.%GenericInterface.type.1, constants.%GenericInterface.generic) {
|
||||
@@ -1351,20 +1343,19 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %X.1: %T = bind_symbolic_name X, 1 [symbolic]
|
||||
// CHECK:STDOUT: %X.2: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic]
|
||||
// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %X.patt.2: %T = symbolic_binding_pattern X, 1 [symbolic]
|
||||
// CHECK:STDOUT: %GenericInterface.type.1: type = generic_interface_type @GenericInterface [template]
|
||||
// CHECK:STDOUT: %GenericInterface.generic: %GenericInterface.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %GenericInterface.type.2: type = facet_type <@GenericInterface, @GenericInterface(%U)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %GenericInterface.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %GenericInterface.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %AnyParam.2: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.1, %GenericInterface.generic) [template]
|
||||
// CHECK:STDOUT: %AnyParam.val: %AnyParam.2 = struct_value () [template]
|
||||
// CHECK:STDOUT: %Y.type: type = facet_type <@Y> [template]
|
||||
// CHECK:STDOUT: %Self.3: %Y.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %Y.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %K.type.1: type = fn_type @K.1 [template]
|
||||
// CHECK:STDOUT: %K.assoc_type: type = assoc_entity_type %Y.type, %K.type.1 [template]
|
||||
// CHECK:STDOUT: %assoc0: %K.assoc_type = assoc_entity element0, imports.%import_ref.10 [template]
|
||||
@@ -1392,9 +1383,9 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref PackageHasParam//default, inst+28, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: %K.assoc_type = import_ref PackageHasParam//default, inst+34, loaded [template = constants.%assoc0]
|
||||
// CHECK:STDOUT: %import_ref.9 = import_ref PackageHasParam//default, inst+30, unloaded
|
||||
// CHECK:STDOUT: %import_ref.11: type = import_ref PackageGenericInterface//default, inst+46, loaded [template = constants.%AnyParam.2]
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref PackageGenericInterface//default, inst+56, loaded [template = constants.%Y.type]
|
||||
// CHECK:STDOUT: %import_ref.13: <witness> = import_ref PackageGenericInterface//default, inst+65, loaded [template = constants.%interface]
|
||||
// CHECK:STDOUT: %import_ref.11: type = import_ref PackageGenericInterface//default, inst+45, loaded [template = constants.%AnyParam.2]
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref PackageGenericInterface//default, inst+55, loaded [template = constants.%Y.type]
|
||||
// CHECK:STDOUT: %import_ref.13: <witness> = import_ref PackageGenericInterface//default, inst+64, loaded [template = constants.%interface]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -1414,7 +1405,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %GenericInterface.type: type = facet_type <@GenericInterface, @GenericInterface(%U)> [symbolic = %GenericInterface.type (constants.%GenericInterface.type.2)]
|
||||
// CHECK:STDOUT: %Self: %GenericInterface.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %GenericInterface.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: !members:
|
||||
@@ -1435,10 +1426,10 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT: witness = imports.%import_ref.13
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic class @AnyParam(constants.%T: type, constants.%X.2: @AnyParam.%T (%T)) {
|
||||
// CHECK:STDOUT: generic class @AnyParam(constants.%T: type, constants.%X: %T) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic = %X (constants.%X.1)]
|
||||
// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)]
|
||||
// CHECK:STDOUT: %X.patt: %T = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
@@ -1472,7 +1463,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @K.1(constants.%Self.3: %Y.type) {
|
||||
// CHECK:STDOUT: generic fn @K.1(constants.%Self.2: %Y.type) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
@@ -1480,18 +1471,11 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @K.2();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X.1) {
|
||||
// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: %X => constants.%X.1
|
||||
// CHECK:STDOUT: %X.patt => constants.%X.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X.2) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: %X => constants.%X.2
|
||||
// CHECK:STDOUT: %X.patt => constants.%X.2
|
||||
// CHECK:STDOUT: %X => constants.%X
|
||||
// CHECK:STDOUT: %X.patt => constants.%X
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @GenericInterface(constants.%U) {
|
||||
@@ -1513,7 +1497,7 @@ fn Test(c: HasExtraInterfaces.C(type)) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @K.1(constants.%Self.3) {}
|
||||
// CHECK:STDOUT: specific @K.1(constants.%Self.2) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- has_extra_interfaces.carbon
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -175,9 +175,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @I(%T) [symbolic]
|
||||
// CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %I.type.2, %F.type.1 [symbolic]
|
||||
@@ -228,7 +227,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F.1, @I(%T) [symbolic = %F.type (constants.%F.type.1)]
|
||||
// CHECK:STDOUT: %F: @I.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)]
|
||||
// CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @I.%I.type (%I.type.2), @I.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)]
|
||||
@@ -265,7 +264,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: complete_type_witness = imports.%import_ref.4
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @I.%I.type (%I.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %I.type.2) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -285,7 +284,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {}
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I(constants.%InInterfaceArgs) {
|
||||
// CHECK:STDOUT: %T => constants.%InInterfaceArgs
|
||||
@@ -293,7 +292,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type => constants.%I.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %F.type => constants.%F.type.3
|
||||
// CHECK:STDOUT: %F => constants.%F.3
|
||||
// CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2
|
||||
@@ -315,9 +314,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @I(%T) [symbolic]
|
||||
// CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %I.type.2, %F.type.1 [symbolic]
|
||||
@@ -348,8 +346,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %import_ref.11: <witness> = import_ref Main//impl_in_interface_args, inst+8, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.12 = import_ref Main//impl_in_interface_args, inst+6, unloaded
|
||||
// CHECK:STDOUT: %import_ref.14: type = import_ref Main//impl_in_interface_args, inst+14, loaded [template = constants.%X]
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Main//impl_in_interface_args, inst+45, loaded [template = constants.%I.type.3]
|
||||
// CHECK:STDOUT: %import_ref.16: <witness> = import_ref Main//impl_in_interface_args, inst+56, loaded [template = constants.%interface]
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Main//impl_in_interface_args, inst+44, loaded [template = constants.%I.type.3]
|
||||
// CHECK:STDOUT: %import_ref.16: <witness> = import_ref Main//impl_in_interface_args, inst+55, loaded [template = constants.%interface]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -377,7 +375,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F.1, @I(%T) [symbolic = %F.type (constants.%F.type.1)]
|
||||
// CHECK:STDOUT: %F: @I.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)]
|
||||
// CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @I.%I.type (%I.type.2), @I.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)]
|
||||
@@ -421,7 +419,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @I.%I.type (%I.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %I.type.2) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -438,7 +436,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {}
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I(constants.%InInterfaceArgs) {
|
||||
// CHECK:STDOUT: %T => constants.%InInterfaceArgs
|
||||
@@ -446,7 +444,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type => constants.%I.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %F.type => constants.%F.type.2
|
||||
// CHECK:STDOUT: %F => constants.%F.2
|
||||
// CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2
|
||||
@@ -467,8 +465,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %I.type.1: type = generic_interface_type @I [template]
|
||||
// CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @I(%T) [symbolic]
|
||||
// CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %I.type.2, %F.type.1 [symbolic]
|
||||
@@ -524,7 +521,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F.1, @I(%T) [symbolic = %F.type (constants.%F.type.1)]
|
||||
// CHECK:STDOUT: %F: @I.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)]
|
||||
// CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @I.%I.type (%I.type.2), @I.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)]
|
||||
@@ -574,7 +571,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: complete_type_witness = imports.%import_ref.10
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @I.%I.type (%I.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %I.type.2) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -604,7 +601,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {}
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I(constants.%X) {
|
||||
// CHECK:STDOUT: %T => constants.%X
|
||||
@@ -612,7 +609,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type => constants.%I.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %F.type => constants.%F.type.3
|
||||
// CHECK:STDOUT: %F => constants.%F.3
|
||||
// CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2
|
||||
@@ -638,8 +635,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %I.type.1: type = generic_interface_type @I [template]
|
||||
// CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @I(%T) [symbolic]
|
||||
// CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %I.type.2, %F.type.1 [symbolic]
|
||||
@@ -672,8 +668,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %import_ref.13: <witness> = import_ref Main//types, inst+43, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Main//types, inst+42, unloaded
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Main//impl_in_class_args, inst+25, loaded [template = constants.%C.2]
|
||||
// CHECK:STDOUT: %import_ref.17: type = import_ref Main//impl_in_class_args, inst+58, loaded [template = constants.%I.type.3]
|
||||
// CHECK:STDOUT: %import_ref.18: <witness> = import_ref Main//impl_in_class_args, inst+69, loaded [template = constants.%interface]
|
||||
// CHECK:STDOUT: %import_ref.17: type = import_ref Main//impl_in_class_args, inst+57, loaded [template = constants.%I.type.3]
|
||||
// CHECK:STDOUT: %import_ref.18: <witness> = import_ref Main//impl_in_class_args, inst+68, loaded [template = constants.%interface]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -703,7 +699,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F.1, @I(%T) [symbolic = %F.type (constants.%F.type.1)]
|
||||
// CHECK:STDOUT: %F: @I.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)]
|
||||
// CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @I.%I.type (%I.type.2), @I.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)]
|
||||
@@ -760,7 +756,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @I.%I.type (%I.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %I.type.2) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -789,7 +785,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {}
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I(constants.%X) {
|
||||
// CHECK:STDOUT: %T => constants.%X
|
||||
@@ -797,7 +793,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type => constants.%I.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %F.type => constants.%F.type.2
|
||||
// CHECK:STDOUT: %F => constants.%F.2
|
||||
// CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2
|
||||
|
||||
@@ -190,11 +190,11 @@ impl forall [T:! type] C as I(T*) {}
|
||||
// CHECK:STDOUT: %I.type.1: type = generic_interface_type @I [template]
|
||||
// CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %C: type = class_type @C [template]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [template]
|
||||
// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic]
|
||||
// CHECK:STDOUT: %I.type.3: type = facet_type <@I, @I(%ptr)> [symbolic]
|
||||
// CHECK:STDOUT: %interface: <witness> = interface_witness () [template]
|
||||
@@ -236,7 +236,7 @@ impl forall [T:! type] C as I(T*) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: !members:
|
||||
@@ -286,7 +286,7 @@ impl forall [T:! type] C as I(T*) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type => constants.%I.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I(%T) {
|
||||
@@ -329,11 +329,11 @@ impl forall [T:! type] C as I(T*) {}
|
||||
// CHECK:STDOUT: %I.type.1: type = generic_interface_type @I [template]
|
||||
// CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %C: type = class_type @C [template]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [template]
|
||||
// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic]
|
||||
// CHECK:STDOUT: %I.type.3: type = facet_type <@I, @I(%ptr)> [symbolic]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -375,7 +375,7 @@ impl forall [T:! type] C as I(T*) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: !members:
|
||||
|
||||
+22
-26
@@ -262,11 +262,10 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: %Action.generic: %Action.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Action.type.2: type = facet_type <@Action, @Action(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @Action.%Action.type (%Action.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Action.type.3: type = facet_type <@Action, @Action(%B)> [template]
|
||||
// CHECK:STDOUT: %A: type = class_type @A [template]
|
||||
// CHECK:STDOUT: %Self.2: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Op.type.1: type = fn_type @Op.1, @Action(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Op.1: %Op.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Op.assoc_type.1: type = assoc_entity_type %Action.type.2, %Op.type.1 [symbolic]
|
||||
@@ -330,7 +329,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.2)]
|
||||
// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Op.type: type = fn_type @Op.1, @Action(%T) [symbolic = %Op.type (constants.%Op.type.1)]
|
||||
// CHECK:STDOUT: %Op: @Action.%Op.type (%Op.type.1) = struct_value () [symbolic = %Op (constants.%Op.1)]
|
||||
// CHECK:STDOUT: %Op.assoc_type: type = assoc_entity_type @Action.%Action.type (%Action.type.2), @Action.%Op.type (%Op.type.1) [symbolic = %Op.assoc_type (constants.%Op.assoc_type.1)]
|
||||
@@ -362,7 +361,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: complete_type_witness = imports.%import_ref.11
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Op.1(constants.%T: type, constants.%Self.1: @Action.%Action.type (%Action.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Op.1(constants.%T: type, constants.%Self: %Action.type.2) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -393,7 +392,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Action.type => constants.%Action.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Op.type => constants.%Op.type.2
|
||||
// CHECK:STDOUT: %Op => constants.%Op.2
|
||||
// CHECK:STDOUT: %Op.assoc_type => constants.%Op.assoc_type.2
|
||||
@@ -405,7 +404,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Op.1(constants.%T, constants.%Self.1) {}
|
||||
// CHECK:STDOUT: specific @Op.1(constants.%T, constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_action.impl.carbon
|
||||
// CHECK:STDOUT:
|
||||
@@ -417,11 +416,10 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: %Action.generic: %Action.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Action.type.2: type = facet_type <@Action, @Action(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @Action.%Action.type (%Action.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Action.type.3: type = facet_type <@Action, @Action(%B)> [template]
|
||||
// CHECK:STDOUT: %A: type = class_type @A [template]
|
||||
// CHECK:STDOUT: %Self.2: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Op.type.1: type = fn_type @Op, @Action(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Op.1: %Op.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Op.assoc_type.1: type = assoc_entity_type %Action.type.2, %Op.type.1 [symbolic]
|
||||
@@ -490,7 +488,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.2)]
|
||||
// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Op.type: type = fn_type @Op, @Action(%T) [symbolic = %Op.type (constants.%Op.type.1)]
|
||||
// CHECK:STDOUT: %Op: @Action.%Op.type (%Op.type.1) = struct_value () [symbolic = %Op (constants.%Op.1)]
|
||||
// CHECK:STDOUT: %Op.assoc_type: type = assoc_entity_type @Action.%Action.type (%Action.type.2), @Action.%Op.type (%Op.type.1) [symbolic = %Op.assoc_type (constants.%Op.assoc_type.1)]
|
||||
@@ -528,7 +526,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: complete_type_witness = imports.%import_ref.19
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Op(constants.%T: type, constants.%Self.1: @Action.%Action.type (%Action.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Op(constants.%T: type, constants.%Self: %Action.type.2) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -555,7 +553,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Action.type => constants.%Action.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Op.type => constants.%Op.type.2
|
||||
// CHECK:STDOUT: %Op => constants.%Op.2
|
||||
// CHECK:STDOUT: %Op.assoc_type => constants.%Op.assoc_type.2
|
||||
@@ -567,7 +565,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Op(constants.%T, constants.%Self.1) {}
|
||||
// CHECK:STDOUT: specific @Op(constants.%T, constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Action(constants.%C) {
|
||||
// CHECK:STDOUT: %T => constants.%C
|
||||
@@ -575,7 +573,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Action.type => constants.%Action.type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Op.type => constants.%Op.type.3
|
||||
// CHECK:STDOUT: %Op => constants.%Op.3
|
||||
// CHECK:STDOUT: %Op.assoc_type => constants.%Op.assoc_type.3
|
||||
@@ -745,11 +743,10 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: %Factory.generic: %Factory.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Factory.type.2: type = facet_type <@Factory, @Factory(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @Factory.%Factory.type (%Factory.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Factory.type.3: type = facet_type <@Factory, @Factory(%B)> [template]
|
||||
// CHECK:STDOUT: %A: type = class_type @A [template]
|
||||
// CHECK:STDOUT: %Self.2: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Make.type.1: type = fn_type @Make.1, @Factory(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Make.1: %Make.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Make.assoc_type.1: type = assoc_entity_type %Factory.type.2, %Make.type.1 [symbolic]
|
||||
@@ -814,7 +811,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.2)]
|
||||
// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Make.type: type = fn_type @Make.1, @Factory(%T) [symbolic = %Make.type (constants.%Make.type.1)]
|
||||
// CHECK:STDOUT: %Make: @Factory.%Make.type (%Make.type.1) = struct_value () [symbolic = %Make (constants.%Make.1)]
|
||||
// CHECK:STDOUT: %Make.assoc_type: type = assoc_entity_type @Factory.%Factory.type (%Factory.type.2), @Factory.%Make.type (%Make.type.1) [symbolic = %Make.assoc_type (constants.%Make.assoc_type.1)]
|
||||
@@ -846,7 +843,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: complete_type_witness = imports.%import_ref.9
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Make.1(constants.%T: type, constants.%Self.1: @Factory.%Factory.type (%Factory.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Make.1(constants.%T: type, constants.%Self: %Factory.type.2) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> @Make.1.%T (%T);
|
||||
@@ -879,7 +876,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Factory.type => constants.%Factory.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Make.type => constants.%Make.type.2
|
||||
// CHECK:STDOUT: %Make => constants.%Make.2
|
||||
// CHECK:STDOUT: %Make.assoc_type => constants.%Make.assoc_type.2
|
||||
@@ -891,7 +888,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Make.1(constants.%T, constants.%Self.1) {
|
||||
// CHECK:STDOUT: specific @Make.1(constants.%T, constants.%Self) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -905,11 +902,10 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: %Factory.generic: %Factory.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Factory.type.2: type = facet_type <@Factory, @Factory(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @Factory.%Factory.type (%Factory.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Factory.type.3: type = facet_type <@Factory, @Factory(%B)> [template]
|
||||
// CHECK:STDOUT: %A: type = class_type @A [template]
|
||||
// CHECK:STDOUT: %Self.2: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Make.type.1: type = fn_type @Make, @Factory(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Make.1: %Make.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Make.assoc_type.1: type = assoc_entity_type %Factory.type.2, %Make.type.1 [symbolic]
|
||||
@@ -979,7 +975,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.2)]
|
||||
// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Make.type: type = fn_type @Make, @Factory(%T) [symbolic = %Make.type (constants.%Make.type.1)]
|
||||
// CHECK:STDOUT: %Make: @Factory.%Make.type (%Make.type.1) = struct_value () [symbolic = %Make (constants.%Make.1)]
|
||||
// CHECK:STDOUT: %Make.assoc_type: type = assoc_entity_type @Factory.%Factory.type (%Factory.type.2), @Factory.%Make.type (%Make.type.1) [symbolic = %Make.assoc_type (constants.%Make.assoc_type.1)]
|
||||
@@ -1019,7 +1015,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: complete_type_witness = %complete_type
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Make(constants.%T: type, constants.%Self.1: @Factory.%Factory.type (%Factory.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Make(constants.%T: type, constants.%Self: %Factory.type.2) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> @Make.%T (%T);
|
||||
@@ -1047,7 +1043,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Factory.type => constants.%Factory.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Make.type => constants.%Make.type.2
|
||||
// CHECK:STDOUT: %Make => constants.%Make.2
|
||||
// CHECK:STDOUT: %Make.assoc_type => constants.%Make.assoc_type.2
|
||||
@@ -1059,7 +1055,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Make(constants.%T, constants.%Self.1) {
|
||||
// CHECK:STDOUT: specific @Make(constants.%T, constants.%Self) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -1069,7 +1065,7 @@ fn MakeC(a: A) -> C {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Factory.type => constants.%Factory.type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Make.type => constants.%Make.type.3
|
||||
// CHECK:STDOUT: %Make => constants.%Make.3
|
||||
// CHECK:STDOUT: %Make.assoc_type => constants.%Make.assoc_type.3
|
||||
|
||||
+2
-2
@@ -49,7 +49,7 @@ let U: (type where .Self impls type).missing = {};
|
||||
// CHECK:STDOUT: --- fail_lookup_type_where.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %type_where: type = facet_type <type where TODO> [template]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -58,7 +58,7 @@ let U: (type where .Self impls type).missing = {};
|
||||
// CHECK:STDOUT: package: <namespace> = namespace [template] {
|
||||
// CHECK:STDOUT: .U = @__global_init.%U
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.loc7: type = where_expr %.Self [template = constants.%type_where] {
|
||||
// CHECK:STDOUT: requirement_impls %.Self.ref, type
|
||||
|
||||
@@ -106,9 +106,8 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT: %AddWith.generic: %AddWith.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %AddWith.type.2: type = facet_type <@AddWith, @AddWith(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @AddWith.%AddWith.type (%AddWith.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %AddWith.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %AddWith.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @AddWith(%T) [symbolic]
|
||||
// CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %AddWith.type.2, %F.type.1 [symbolic]
|
||||
@@ -153,7 +152,7 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T)> [symbolic = %AddWith.type (constants.%AddWith.type.2)]
|
||||
// CHECK:STDOUT: %Self: %AddWith.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %AddWith.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F.1, @AddWith(%T) [symbolic = %F.type (constants.%F.type.1)]
|
||||
// CHECK:STDOUT: %F: @AddWith.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)]
|
||||
// CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @AddWith.%AddWith.type (%AddWith.type.2), @AddWith.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)]
|
||||
@@ -184,7 +183,7 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT: complete_type_witness = %complete_type
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @AddWith.%AddWith.type (%AddWith.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %AddWith.type.2) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -204,7 +203,7 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {}
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AddWith(constants.%C) {
|
||||
// CHECK:STDOUT: %T => constants.%C
|
||||
@@ -212,7 +211,7 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %AddWith.type => constants.%AddWith.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %F.type => constants.%F.type.3
|
||||
// CHECK:STDOUT: %F => constants.%F.3
|
||||
// CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2
|
||||
|
||||
@@ -81,20 +81,18 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.8 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -112,18 +110,16 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.25 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -155,35 +151,35 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Main//lib, inst+33, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3 = import_ref Main//lib, inst+34, unloaded
|
||||
// CHECK:STDOUT: %import_ref.4 = import_ref Main//lib, inst+35, unloaded
|
||||
// CHECK:STDOUT: %import_ref.5: type = import_ref Main//lib, inst+76, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.6: type = import_ref Main//lib, inst+77, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref Main//lib, inst+78, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8 = import_ref Main//lib, inst+49, unloaded
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Main//lib, inst+102, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.10: type = import_ref Main//lib, inst+103, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Main//lib, inst+104, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Main//lib, inst+127, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Main//lib, inst+128, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Main//lib, inst+129, unloaded
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Main//lib, inst+155, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.17: type = import_ref Main//lib, inst+156, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.18 = import_ref Main//lib, inst+157, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19 = import_ref Main//lib, inst+183, unloaded
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Main//lib, inst+184, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Main//lib, inst+185, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22: type = import_ref Main//lib, inst+189, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.23: type = import_ref Main//lib, inst+190, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Main//lib, inst+191, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25 = import_ref Main//lib, inst+205, unloaded
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Main//lib, inst+240, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.27: type = import_ref Main//lib, inst+241, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Main//lib, inst+242, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Main//lib, inst+265, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Main//lib, inst+266, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Main//lib, inst+267, unloaded
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Main//lib, inst+293, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.34: type = import_ref Main//lib, inst+294, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.35 = import_ref Main//lib, inst+295, unloaded
|
||||
// CHECK:STDOUT: %import_ref.5: type = import_ref Main//lib, inst+74, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.6: type = import_ref Main//lib, inst+75, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref Main//lib, inst+76, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8 = import_ref Main//lib, inst+48, unloaded
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Main//lib, inst+100, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.10: type = import_ref Main//lib, inst+101, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Main//lib, inst+102, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Main//lib, inst+125, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Main//lib, inst+126, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Main//lib, inst+127, unloaded
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Main//lib, inst+153, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.17: type = import_ref Main//lib, inst+154, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.18 = import_ref Main//lib, inst+155, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19 = import_ref Main//lib, inst+181, unloaded
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Main//lib, inst+182, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Main//lib, inst+183, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22: type = import_ref Main//lib, inst+187, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.23: type = import_ref Main//lib, inst+188, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Main//lib, inst+189, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25 = import_ref Main//lib, inst+202, unloaded
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Main//lib, inst+236, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.27: type = import_ref Main//lib, inst+237, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Main//lib, inst+238, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Main//lib, inst+261, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Main//lib, inst+262, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Main//lib, inst+263, unloaded
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Main//lib, inst+289, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.34: type = import_ref Main//lib, inst+290, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.35 = import_ref Main//lib, inst+291, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -209,7 +205,7 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -229,7 +225,7 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -375,10 +371,10 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -420,13 +416,13 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -516,7 +512,7 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -559,7 +555,7 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -639,11 +635,11 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -686,7 +682,7 @@ var b: i32 = a;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
|
||||
@@ -198,9 +198,8 @@ var n: {} = i32;
|
||||
// CHECK:STDOUT: %Int.type: type = fn_type @Int [template]
|
||||
// CHECK:STDOUT: %Int: %Int.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %N.1: @Int.%T (%T) = bind_symbolic_name N, 1 [symbolic]
|
||||
// CHECK:STDOUT: %N: %T = bind_symbolic_name N, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %N.2: %T = bind_symbolic_name N, 1 [symbolic]
|
||||
// CHECK:STDOUT: %N.patt.2: %T = symbolic_binding_pattern N, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Int.specific_fn: <specific function> = specific_function %Int, @Int(Core.IntLiteral, %int_32) [template]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -224,10 +223,10 @@ var n: {} = i32;
|
||||
// CHECK:STDOUT: %n: ref %empty_struct_type = bind_name n, %n.var
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Int(constants.%T: type, constants.%N.1: @Int.%T (%T)) {
|
||||
// CHECK:STDOUT: generic fn @Int(constants.%T: type, constants.%N: %T) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %N: %T = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.2)]
|
||||
// CHECK:STDOUT: %N: %T = bind_symbolic_name N, 1 [symbolic = %N (constants.%N)]
|
||||
// CHECK:STDOUT: %N.patt: %T = symbolic_binding_pattern N, 1 [symbolic = %N.patt (constants.%N.patt.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
@@ -244,11 +243,11 @@ var n: {} = i32;
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Int(constants.%T, constants.%N.1) {
|
||||
// CHECK:STDOUT: specific @Int(constants.%T, constants.%N) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: %N => constants.%N.1
|
||||
// CHECK:STDOUT: %N.patt => constants.%N.1
|
||||
// CHECK:STDOUT: %N => constants.%N
|
||||
// CHECK:STDOUT: %N.patt => constants.%N
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Int(Core.IntLiteral, constants.%int_32) {
|
||||
|
||||
+48
-52
@@ -92,20 +92,18 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.9 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -123,18 +121,16 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.26 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -159,7 +155,7 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+20, unloaded
|
||||
// CHECK:STDOUT: %import_ref.2: ref %ptr = import_ref Implicit//default, inst+332, loaded
|
||||
// CHECK:STDOUT: %import_ref.2: ref %ptr = import_ref Implicit//default, inst+328, loaded
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .Int = %import_ref.37
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
@@ -168,35 +164,35 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT: %import_ref.3 = import_ref Implicit//default, inst+33, unloaded
|
||||
// CHECK:STDOUT: %import_ref.4 = import_ref Implicit//default, inst+34, unloaded
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+35, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6: type = import_ref Implicit//default, inst+76, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.7: type = import_ref Implicit//default, inst+77, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.8 = import_ref Implicit//default, inst+78, unloaded
|
||||
// CHECK:STDOUT: %import_ref.9 = import_ref Implicit//default, inst+49, unloaded
|
||||
// CHECK:STDOUT: %import_ref.10: type = import_ref Implicit//default, inst+102, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.11: type = import_ref Implicit//default, inst+103, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.12 = import_ref Implicit//default, inst+104, unloaded
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+127, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.14: type = import_ref Implicit//default, inst+128, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.15 = import_ref Implicit//default, inst+129, unloaded
|
||||
// CHECK:STDOUT: %import_ref.17: type = import_ref Implicit//default, inst+155, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.18: type = import_ref Implicit//default, inst+156, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.19 = import_ref Implicit//default, inst+157, unloaded
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Implicit//default, inst+183, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+184, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+185, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23: type = import_ref Implicit//default, inst+189, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.24: type = import_ref Implicit//default, inst+190, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.25 = import_ref Implicit//default, inst+191, unloaded
|
||||
// CHECK:STDOUT: %import_ref.26 = import_ref Implicit//default, inst+205, unloaded
|
||||
// CHECK:STDOUT: %import_ref.27: type = import_ref Implicit//default, inst+240, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.28: type = import_ref Implicit//default, inst+241, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.29 = import_ref Implicit//default, inst+242, unloaded
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+265, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref Implicit//default, inst+266, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.32 = import_ref Implicit//default, inst+267, unloaded
|
||||
// CHECK:STDOUT: %import_ref.34: type = import_ref Implicit//default, inst+293, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref Implicit//default, inst+294, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.36 = import_ref Implicit//default, inst+295, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6: type = import_ref Implicit//default, inst+74, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.7: type = import_ref Implicit//default, inst+75, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.8 = import_ref Implicit//default, inst+76, unloaded
|
||||
// CHECK:STDOUT: %import_ref.9 = import_ref Implicit//default, inst+48, unloaded
|
||||
// CHECK:STDOUT: %import_ref.10: type = import_ref Implicit//default, inst+100, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.11: type = import_ref Implicit//default, inst+101, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.12 = import_ref Implicit//default, inst+102, unloaded
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+125, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.14: type = import_ref Implicit//default, inst+126, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.15 = import_ref Implicit//default, inst+127, unloaded
|
||||
// CHECK:STDOUT: %import_ref.17: type = import_ref Implicit//default, inst+153, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.18: type = import_ref Implicit//default, inst+154, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.19 = import_ref Implicit//default, inst+155, unloaded
|
||||
// CHECK:STDOUT: %import_ref.20 = import_ref Implicit//default, inst+181, unloaded
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+182, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+183, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23: type = import_ref Implicit//default, inst+187, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.24: type = import_ref Implicit//default, inst+188, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.25 = import_ref Implicit//default, inst+189, unloaded
|
||||
// CHECK:STDOUT: %import_ref.26 = import_ref Implicit//default, inst+202, unloaded
|
||||
// CHECK:STDOUT: %import_ref.27: type = import_ref Implicit//default, inst+236, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.28: type = import_ref Implicit//default, inst+237, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.29 = import_ref Implicit//default, inst+238, unloaded
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+261, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref Implicit//default, inst+262, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.32 = import_ref Implicit//default, inst+263, unloaded
|
||||
// CHECK:STDOUT: %import_ref.34: type = import_ref Implicit//default, inst+289, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref Implicit//default, inst+290, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.36 = import_ref Implicit//default, inst+291, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -224,7 +220,7 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -244,7 +240,7 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -390,10 +386,10 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -435,13 +431,13 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -531,7 +527,7 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -574,7 +570,7 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -654,11 +650,11 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -701,7 +697,7 @@ var a: i32* = a_ref;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
|
||||
+48
-52
@@ -288,15 +288,13 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.6 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [template]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.1, @ImplicitAs(%i32) [template]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [template]
|
||||
@@ -541,7 +539,7 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -787,13 +785,13 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT: return %.loc8_41 to %return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%T (%T);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type)]() -> @Convert.1.%T (%T);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Convert.2[%self.param_patt: Core.IntLiteral]() -> %i32 = "int.convert_checked";
|
||||
@@ -882,11 +880,11 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.1(constants.%T, constants.%Self.1) {
|
||||
// CHECK:STDOUT: specific @Convert.1(constants.%T, constants.%Self) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @ImplicitAs(constants.%i32) {
|
||||
@@ -895,7 +893,7 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.2
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.2
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -915,7 +913,7 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.3
|
||||
@@ -1049,15 +1047,13 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT: %int_0.1: Core.IntLiteral = int_value 0 [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.14 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [template]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.1, @ImplicitAs(%i32) [template]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [template]
|
||||
@@ -1166,30 +1162,30 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Core//default, inst+71, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.17: type = import_ref Core//default, inst+79, loaded [template = constants.%ImplicitAs.type.3]
|
||||
// CHECK:STDOUT: %import_ref.18: <witness> = import_ref Core//default, inst+103, loaded [template = constants.%interface.1]
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref P//library, inst+148, loaded [template = constants.%C.2]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref P//library, inst+153, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.21: <witness> = import_ref P//library, inst+174, loaded [template = constants.%interface.2]
|
||||
// CHECK:STDOUT: %import_ref.22: type = import_ref P//library, inst+191, loaded [template = constants.%C.3]
|
||||
// CHECK:STDOUT: %import_ref.23: type = import_ref P//library, inst+196, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.24: <witness> = import_ref P//library, inst+212, loaded [template = constants.%interface.3]
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref P//library, inst+228, loaded [template = constants.%C.4]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref P//library, inst+233, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.27: <witness> = import_ref P//library, inst+249, loaded [template = constants.%interface.4]
|
||||
// CHECK:STDOUT: %import_ref.28: type = import_ref P//library, inst+265, loaded [template = constants.%C.5]
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref P//library, inst+270, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.30: <witness> = import_ref P//library, inst+286, loaded [template = constants.%interface.5]
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref P//library, inst+302, loaded [template = constants.%C.6]
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref P//library, inst+307, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.33: <witness> = import_ref P//library, inst+323, loaded [template = constants.%interface.6]
|
||||
// CHECK:STDOUT: %import_ref.34: type = import_ref P//library, inst+339, loaded [template = constants.%C.7]
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref P//library, inst+344, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.36: <witness> = import_ref P//library, inst+360, loaded [template = constants.%interface.7]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref P//library, inst+376, loaded [template = constants.%C.8]
|
||||
// CHECK:STDOUT: %import_ref.38: type = import_ref P//library, inst+381, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref P//library, inst+397, loaded [template = constants.%interface.8]
|
||||
// CHECK:STDOUT: %import_ref.40: type = import_ref P//library, inst+413, loaded [template = constants.%C.9]
|
||||
// CHECK:STDOUT: %import_ref.41: type = import_ref P//library, inst+418, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.42: <witness> = import_ref P//library, inst+434, loaded [template = constants.%interface.9]
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref P//library, inst+146, loaded [template = constants.%C.2]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref P//library, inst+151, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.21: <witness> = import_ref P//library, inst+172, loaded [template = constants.%interface.2]
|
||||
// CHECK:STDOUT: %import_ref.22: type = import_ref P//library, inst+189, loaded [template = constants.%C.3]
|
||||
// CHECK:STDOUT: %import_ref.23: type = import_ref P//library, inst+194, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.24: <witness> = import_ref P//library, inst+210, loaded [template = constants.%interface.3]
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref P//library, inst+226, loaded [template = constants.%C.4]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref P//library, inst+231, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.27: <witness> = import_ref P//library, inst+247, loaded [template = constants.%interface.4]
|
||||
// CHECK:STDOUT: %import_ref.28: type = import_ref P//library, inst+263, loaded [template = constants.%C.5]
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref P//library, inst+268, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.30: <witness> = import_ref P//library, inst+284, loaded [template = constants.%interface.5]
|
||||
// CHECK:STDOUT: %import_ref.31: type = import_ref P//library, inst+300, loaded [template = constants.%C.6]
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref P//library, inst+305, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.33: <witness> = import_ref P//library, inst+321, loaded [template = constants.%interface.6]
|
||||
// CHECK:STDOUT: %import_ref.34: type = import_ref P//library, inst+337, loaded [template = constants.%C.7]
|
||||
// CHECK:STDOUT: %import_ref.35: type = import_ref P//library, inst+342, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.36: <witness> = import_ref P//library, inst+358, loaded [template = constants.%interface.7]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref P//library, inst+374, loaded [template = constants.%C.8]
|
||||
// CHECK:STDOUT: %import_ref.38: type = import_ref P//library, inst+379, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref P//library, inst+395, loaded [template = constants.%interface.8]
|
||||
// CHECK:STDOUT: %import_ref.40: type = import_ref P//library, inst+411, loaded [template = constants.%C.9]
|
||||
// CHECK:STDOUT: %import_ref.41: type = import_ref P//library, inst+416, loaded [template = constants.%ImplicitAs.type.4]
|
||||
// CHECK:STDOUT: %import_ref.42: <witness> = import_ref P//library, inst+432, loaded [template = constants.%interface.9]
|
||||
// CHECK:STDOUT: %import_ref.43: %Make.type = import_ref P//library, inst+55, loaded [template = constants.%Make]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -1226,7 +1222,7 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -1533,13 +1529,13 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT: return %Make.call to %return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%T (%T);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type)]() -> @Convert.1.%T (%T);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Convert.2[%self.param_patt: Core.IntLiteral]() -> %i32 = "int.convert_checked";
|
||||
@@ -1582,11 +1578,11 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT: %T.patt => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.1(constants.%T, constants.%Self.1) {
|
||||
// CHECK:STDOUT: specific @Convert.1(constants.%T, constants.%Self) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @ImplicitAs(constants.%i32) {
|
||||
@@ -1595,7 +1591,7 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.3
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.2
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.2
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -1615,7 +1611,7 @@ fn F0(n: i32) -> P.D {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.4
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.4
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.3
|
||||
|
||||
+161
-173
@@ -43,10 +43,10 @@ var c_bad: C({.c = 1, .d = 2}) = F();
|
||||
// --- fail_bad_value.impl.carbon
|
||||
|
||||
impl package Implicit;
|
||||
// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `C(<cannot stringify inst+359 kind StructValue>)` to `C(<cannot stringify inst+347 kind StructValue>)` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `C(<cannot stringify inst+355 kind StructValue>)` to `C(<cannot stringify inst+343 kind StructValue>)` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+3]]:1: note: type `C(<cannot stringify inst+359 kind StructValue>)` does not implement interface `ImplicitAs(C(<cannot stringify inst+347 kind StructValue>))` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+3]]:1: note: type `C(<cannot stringify inst+355 kind StructValue>)` does not implement interface `ImplicitAs(C(<cannot stringify inst+343 kind StructValue>))` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
@@ -273,20 +273,18 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -304,18 +302,16 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -373,9 +369,9 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1: ref %struct_type.a = import_ref Implicit//default, inst+22, loaded
|
||||
// CHECK:STDOUT: %import_ref.2: ref %struct_type.a.d.1 = import_ref Implicit//default, inst+357, loaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+416, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+460, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %import_ref.2: ref %struct_type.a.d.1 = import_ref Implicit//default, inst+353, loaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+412, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+456, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .Int = %import_ref.39
|
||||
// CHECK:STDOUT: .ImplicitAs = %import_ref.42
|
||||
@@ -385,37 +381,37 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+38, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Implicit//default, inst+39, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)]
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+40, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10: <witness> = import_ref Implicit//default, inst+83, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+54, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+210, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+245, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+246, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+247, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+270, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+271, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+272, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+298, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+299, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+300, unloaded
|
||||
// CHECK:STDOUT: %import_ref.40: <witness> = import_ref Implicit//default, inst+423, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.41 = import_ref Implicit//default, inst+421, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+79, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+80, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10: <witness> = import_ref Implicit//default, inst+81, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+53, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+105, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+106, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+107, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+130, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+131, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+132, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+158, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+159, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+160, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+186, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+187, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+188, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+192, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+193, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+194, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+207, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+241, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+242, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+243, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+266, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+267, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+268, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+294, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+295, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+296, unloaded
|
||||
// CHECK:STDOUT: %import_ref.40: <witness> = import_ref Implicit//default, inst+419, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.41 = import_ref Implicit//default, inst+417, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -486,7 +482,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -506,7 +502,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -665,10 +661,10 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -710,13 +706,13 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -838,7 +834,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -881,7 +877,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -961,11 +957,11 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -1008,7 +1004,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
@@ -1060,7 +1056,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.13
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.13
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5
|
||||
@@ -1100,20 +1096,18 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -1131,18 +1125,16 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -1180,9 +1172,9 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+22, unloaded
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+357, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+416, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+460, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+353, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+412, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+456, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
// CHECK:STDOUT: import Core//prelude/...
|
||||
@@ -1190,37 +1182,37 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+38, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6 = import_ref Implicit//default, inst+39, unloaded
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+40, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10 = import_ref Implicit//default, inst+83, unloaded
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+54, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+210, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+245, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+246, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+247, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+270, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+271, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+272, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+298, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+299, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+300, unloaded
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref Implicit//default, inst+423, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+421, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+79, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+80, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10 = import_ref Implicit//default, inst+81, unloaded
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+53, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+105, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+106, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+107, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+130, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+131, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+132, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+158, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+159, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+160, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+186, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+187, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+188, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+192, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+193, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+194, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+207, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+241, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+242, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+243, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+266, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+267, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+268, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+294, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+295, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+296, unloaded
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref Implicit//default, inst+419, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+417, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -1249,7 +1241,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -1269,7 +1261,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -1428,10 +1420,10 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -1473,13 +1465,13 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -1572,7 +1564,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -1615,7 +1607,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -1695,11 +1687,11 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -1742,7 +1734,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
@@ -1802,20 +1794,18 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -1833,18 +1823,16 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -1904,9 +1892,9 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+22, unloaded
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+357, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+416, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+460, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+353, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+412, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+456, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .ImplicitAs = %import_ref.41
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
@@ -1915,37 +1903,37 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+38, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Implicit//default, inst+39, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)]
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+40, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10: <witness> = import_ref Implicit//default, inst+83, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+54, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+210, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+245, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+246, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+247, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+270, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+271, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+272, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+298, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+299, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+300, unloaded
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref Implicit//default, inst+423, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+421, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+79, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+80, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10: <witness> = import_ref Implicit//default, inst+81, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+53, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+105, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+106, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+107, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+130, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+131, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+132, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+158, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+159, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+160, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+186, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+187, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+188, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+192, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+193, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+194, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+207, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+241, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+242, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+243, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+266, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+267, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+268, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+294, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+295, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+296, unloaded
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref Implicit//default, inst+419, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+417, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -1989,7 +1977,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -2009,7 +1997,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -2168,10 +2156,10 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -2213,13 +2201,13 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -2313,7 +2301,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -2356,7 +2344,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -2436,11 +2424,11 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -2483,7 +2471,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
@@ -2535,7 +2523,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.13
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.13
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5
|
||||
@@ -2581,7 +2569,7 @@ var c_bad: C({.a = 3, .b = 4}) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.7
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.15
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.15
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.6
|
||||
|
||||
+161
-173
@@ -45,10 +45,10 @@ var c_bad: C((1, 2, 3)) = F();
|
||||
|
||||
impl package Implicit;
|
||||
|
||||
// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `C(<cannot stringify inst+359 kind TupleValue>)` to `C(<cannot stringify inst+347 kind TupleValue>)` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `C(<cannot stringify inst+355 kind TupleValue>)` to `C(<cannot stringify inst+343 kind TupleValue>)` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+3]]:1: note: type `C(<cannot stringify inst+359 kind TupleValue>)` does not implement interface `ImplicitAs(C(<cannot stringify inst+347 kind TupleValue>))` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+3]]:1: note: type `C(<cannot stringify inst+355 kind TupleValue>)` does not implement interface `ImplicitAs(C(<cannot stringify inst+343 kind TupleValue>))` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
var c_bad: C((3, 4)) = F();
|
||||
@@ -302,20 +302,18 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -333,18 +331,16 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -404,9 +400,9 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1: ref %tuple.type.2 = import_ref Implicit//default, inst+24, loaded
|
||||
// CHECK:STDOUT: %import_ref.2: ref %tuple.type.8 = import_ref Implicit//default, inst+370, loaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+453, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+487, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %import_ref.2: ref %tuple.type.8 = import_ref Implicit//default, inst+366, loaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+449, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+483, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .Int = %import_ref.39
|
||||
// CHECK:STDOUT: .ImplicitAs = %import_ref.42
|
||||
@@ -416,37 +412,37 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+40, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Implicit//default, inst+41, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)]
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+42, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+83, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+84, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10: <witness> = import_ref Implicit//default, inst+85, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+56, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+109, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+110, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+111, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+134, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+135, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+136, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+162, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+163, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+164, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+190, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+191, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+192, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+196, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+197, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+198, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+212, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+247, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+248, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+249, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+272, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+273, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+274, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+300, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+301, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+302, unloaded
|
||||
// CHECK:STDOUT: %import_ref.40: <witness> = import_ref Implicit//default, inst+460, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.41 = import_ref Implicit//default, inst+458, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10: <witness> = import_ref Implicit//default, inst+83, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+55, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+209, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+243, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+244, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+245, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+268, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+269, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+270, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+296, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+297, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+298, unloaded
|
||||
// CHECK:STDOUT: %import_ref.40: <witness> = import_ref Implicit//default, inst+456, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.41 = import_ref Implicit//default, inst+454, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -526,7 +522,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -546,7 +542,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -705,10 +701,10 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -750,13 +746,13 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -886,7 +882,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -929,7 +925,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -1009,11 +1005,11 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -1056,7 +1052,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
@@ -1108,7 +1104,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.13
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.13
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5
|
||||
@@ -1148,20 +1144,18 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -1179,18 +1173,16 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -1229,9 +1221,9 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+24, unloaded
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+370, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+453, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+487, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+366, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+449, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+483, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
// CHECK:STDOUT: import Core//prelude/...
|
||||
@@ -1239,37 +1231,37 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+40, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6 = import_ref Implicit//default, inst+41, unloaded
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+42, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+83, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+84, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10 = import_ref Implicit//default, inst+85, unloaded
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+56, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+109, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+110, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+111, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+134, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+135, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+136, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+162, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+163, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+164, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+190, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+191, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+192, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+196, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+197, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+198, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+212, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+247, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+248, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+249, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+272, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+273, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+274, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+300, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+301, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+302, unloaded
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref Implicit//default, inst+460, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+458, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10 = import_ref Implicit//default, inst+83, unloaded
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+55, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+209, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+243, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+244, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+245, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+268, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+269, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+270, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+296, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+297, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+298, unloaded
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref Implicit//default, inst+456, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+454, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -1299,7 +1291,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -1319,7 +1311,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -1478,10 +1470,10 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -1523,13 +1515,13 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -1622,7 +1614,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -1665,7 +1657,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -1745,11 +1737,11 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -1792,7 +1784,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
@@ -1852,20 +1844,18 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic]
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness (%Convert.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic]
|
||||
@@ -1883,18 +1873,16 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.4: <witness> = interface_witness (%Convert.6) [symbolic]
|
||||
// CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %interface.5: <witness> = interface_witness (%Convert.8) [symbolic]
|
||||
// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic]
|
||||
// CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic]
|
||||
// CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic]
|
||||
@@ -1954,9 +1942,9 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+24, unloaded
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+370, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+453, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+487, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+366, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+449, loaded [template = constants.%C.generic]
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+483, loaded [template = constants.%F]
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .ImplicitAs = %import_ref.41
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
@@ -1965,37 +1953,37 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+40, unloaded
|
||||
// CHECK:STDOUT: %import_ref.6: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Implicit//default, inst+41, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)]
|
||||
// CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+42, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+83, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+84, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10: <witness> = import_ref Implicit//default, inst+85, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+56, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+109, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+110, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+111, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+134, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+135, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+136, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+162, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+163, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+164, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+190, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+191, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+192, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+196, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+197, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+198, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+212, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+247, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+248, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+249, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+272, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+273, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+274, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+300, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+301, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+302, unloaded
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref Implicit//default, inst+460, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+458, unloaded
|
||||
// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.10: <witness> = import_ref Implicit//default, inst+83, loaded [symbolic = @impl.1.%interface (constants.%interface.1)]
|
||||
// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+55, unloaded
|
||||
// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded
|
||||
// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded
|
||||
// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5]
|
||||
// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded
|
||||
// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded
|
||||
// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded
|
||||
// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded
|
||||
// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)]
|
||||
// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded
|
||||
// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+209, unloaded
|
||||
// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+243, loaded [template = Core.IntLiteral]
|
||||
// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+244, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)]
|
||||
// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+245, unloaded
|
||||
// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+268, loaded [symbolic = @impl.7.%iN (constants.%iN)]
|
||||
// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+269, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+270, unloaded
|
||||
// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+296, loaded [symbolic = @impl.8.%uN (constants.%uN)]
|
||||
// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+297, loaded [template = constants.%As.type.5]
|
||||
// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+298, unloaded
|
||||
// CHECK:STDOUT: %import_ref.39: <witness> = import_ref Implicit//default, inst+456, loaded [template = constants.%complete_type]
|
||||
// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+454, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -2039,7 +2027,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)]
|
||||
// CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)]
|
||||
@@ -2059,7 +2047,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)]
|
||||
// CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)]
|
||||
// CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)]
|
||||
@@ -2218,10 +2206,10 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest);
|
||||
@@ -2263,13 +2251,13 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) {
|
||||
// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) {
|
||||
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)]
|
||||
// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) {
|
||||
@@ -2363,7 +2351,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.2(constants.%N) {
|
||||
@@ -2406,7 +2394,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.5
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.5
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2
|
||||
@@ -2486,11 +2474,11 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT: %Dest.patt => constants.%Dest
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) {
|
||||
// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) {
|
||||
// CHECK:STDOUT: %Dest => constants.%Dest
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.3
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Convert.7(constants.%N) {
|
||||
@@ -2533,7 +2521,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.5
|
||||
// CHECK:STDOUT: %Self => constants.%Self.4
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.11
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.11
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4
|
||||
@@ -2585,7 +2573,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.13
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.13
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5
|
||||
@@ -2631,7 +2619,7 @@ var c_bad: C((3, 4)) = F();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.7
|
||||
// CHECK:STDOUT: %Self => constants.%Self.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self.1
|
||||
// CHECK:STDOUT: %Convert.type => constants.%Convert.type.15
|
||||
// CHECK:STDOUT: %Convert => constants.%Convert.15
|
||||
// CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.6
|
||||
|
||||
+120
-401
@@ -25,16 +25,6 @@ fn Impls(V:! J where .Self impls I);
|
||||
|
||||
fn And(W:! I where .Self impls J and .Member == ());
|
||||
|
||||
// --- equal_constraint.carbon
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
interface N {
|
||||
let P:! type;
|
||||
}
|
||||
|
||||
fn Equal(T:! N where .P = {});
|
||||
|
||||
// --- associated_type_impls.carbon
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
@@ -48,22 +38,6 @@ interface K {
|
||||
|
||||
fn AssociatedTypeImpls(W:! K where .Associated impls M);
|
||||
|
||||
// --- fail_check_rewrite_constraints.carbon
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
import library "state_constraints";
|
||||
|
||||
// `2` can't be converted to the type of `I.Member`
|
||||
// CHECK:STDERR: fail_check_rewrite_constraints.carbon:[[@LINE+7]]:46: error: cannot implicitly convert from `Core.IntLiteral` to `type` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: fn RewriteTypeMismatch(X:! I where .Member = 2);
|
||||
// CHECK:STDERR: ^
|
||||
// CHECK:STDERR: fail_check_rewrite_constraints.carbon:[[@LINE+4]]:46: note: type `Core.IntLiteral` does not implement interface `ImplicitAs(type)` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: fn RewriteTypeMismatch(X:! I where .Member = 2);
|
||||
// CHECK:STDERR: ^
|
||||
// CHECK:STDERR:
|
||||
fn RewriteTypeMismatch(X:! I where .Member = 2);
|
||||
|
||||
// --- fail_left_of_impls_non_type.carbon
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
@@ -112,10 +86,10 @@ impl C as J {}
|
||||
|
||||
// TODO: Should report that `C` does not meet the constraint.
|
||||
fn DoesNotImplI() {
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+11]]:3: error: cannot implicitly convert from `type` to `J` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+11]]:3: error: cannot implicitly convert from `type` to `J where...` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: Impls(C);
|
||||
// CHECK:STDERR: ^~~~~~~~
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+8]]:3: note: type `type` does not implement interface `ImplicitAs(J)` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+8]]:3: note: type `type` does not implement interface `ImplicitAs(J where...)` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: Impls(C);
|
||||
// CHECK:STDERR: ^~~~~~~~
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE-14]]:1: in import [InImport]
|
||||
@@ -130,66 +104,48 @@ fn EmptyStruct(Y:! J where .Self == {});
|
||||
|
||||
// TODO: Should report that `C` does not meeet the constraint.
|
||||
fn NotEmptyStruct() {
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+10]]:3: error: cannot implicitly convert from `type` to `J where...` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+9]]:3: error: cannot implicitly convert from `type` to `J where...` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: EmptyStruct(C);
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+7]]:3: note: type `type` does not implement interface `ImplicitAs(J where...)` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+6]]:3: note: type `type` does not implement interface `ImplicitAs(J where...)` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: EmptyStruct(C);
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE-10]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere]
|
||||
// CHECK:STDERR: fn EmptyStruct(Y:! J where .Self == {});
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
EmptyStruct(C);
|
||||
}
|
||||
|
||||
// --- fail_todo_let.carbon
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
interface A {}
|
||||
class D {}
|
||||
impl D as A {}
|
||||
// TODO: This should be a compile-time binding, once that is supported.
|
||||
// CHECK:STDERR: fail_todo_let.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `type` to `type where...` [ImplicitAsConversionFailure]
|
||||
// CHECK:STDERR: let B: type where .Self impls A = D;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_todo_let.carbon:[[@LINE+3]]:1: note: type `type` does not implement interface `ImplicitAs(type where...)` [MissingImplInMemberAccessNote]
|
||||
// CHECK:STDERR: let B: type where .Self impls A = D;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
let B: type where .Self impls A = D;
|
||||
|
||||
// CHECK:STDOUT: --- state_constraints.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %J.type.1: type = facet_type <@J> [template]
|
||||
// CHECK:STDOUT: %Self.1: %J.type.1 = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template]
|
||||
// CHECK:STDOUT: %Self.2: %I.type.1 = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type.1: type = assoc_entity_type %I.type.1, type [template]
|
||||
// CHECK:STDOUT: %J.type: type = facet_type <@J> [template]
|
||||
// CHECK:STDOUT: %Self.1: %J.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I> [template]
|
||||
// CHECK:STDOUT: %Self.2: %I.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type.1: type = assoc_entity_type %I.type, type [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type.1 = assoc_entity element0, @I.%Member [template]
|
||||
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template]
|
||||
// CHECK:STDOUT: %assoc_type.2: type = assoc_entity_type %I.type.1, %J.type.1 [template]
|
||||
// CHECK:STDOUT: %assoc_type.2: type = assoc_entity_type %I.type, %J.type [template]
|
||||
// CHECK:STDOUT: %assoc1: %assoc_type.2 = assoc_entity element1, @I.%Second [template]
|
||||
// CHECK:STDOUT: %.Self.1: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %U: %I.type.2 = bind_symbolic_name U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %U.patt: %I.type.2 = symbolic_binding_pattern U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self.1: %I.type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %U: %I_where.type = bind_symbolic_name U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %U.patt: %I_where.type = symbolic_binding_pattern U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %EqualEqual.type: type = fn_type @EqualEqual [template]
|
||||
// CHECK:STDOUT: %EqualEqual: %EqualEqual.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.Self.2: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self.2: %J.type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %.Self.as_type.1: type = facet_access_type %.Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %J.type.2: type = facet_type <@J where TODO> [template]
|
||||
// CHECK:STDOUT: %V: %J.type.2 = bind_symbolic_name V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %V.patt: %J.type.2 = symbolic_binding_pattern V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %J_where.type: type = facet_type <@J where TODO> [template]
|
||||
// CHECK:STDOUT: %V: %J_where.type = bind_symbolic_name V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %V.patt: %J_where.type = symbolic_binding_pattern V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Impls.type: type = fn_type @Impls [template]
|
||||
// CHECK:STDOUT: %Impls: %Impls.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.Self.as_type.2: type = facet_access_type %.Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic]
|
||||
// CHECK:STDOUT: %I.type.3: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %W: %I.type.3 = bind_symbolic_name W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %W.patt: %I.type.3 = symbolic_binding_pattern W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %W: %I_where.type = bind_symbolic_name W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %W.patt: %I_where.type = symbolic_binding_pattern W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %And.type: type = fn_type @And [template]
|
||||
// CHECK:STDOUT: %And: %And.type = struct_value () [template]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -211,64 +167,64 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: .And = %And.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %J.decl: type = interface_decl @J [template = constants.%J.type.1] {} {}
|
||||
// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type.1] {} {}
|
||||
// CHECK:STDOUT: %J.decl: type = interface_decl @J [template = constants.%J.type] {} {}
|
||||
// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {}
|
||||
// CHECK:STDOUT: %EqualEqual.decl: %EqualEqual.type = fn_decl @EqualEqual [template = constants.%EqualEqual] {
|
||||
// CHECK:STDOUT: %U.patt.loc11_15.1: %I.type.2 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.param_patt: %I.type.2 = value_param_pattern %U.patt.loc11_15.1, runtime_param<invalid> [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.patt.loc11_15.1: %I_where.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.param_patt: %I_where.type = value_param_pattern %U.patt.loc11_15.1, runtime_param<invalid> [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type]
|
||||
// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.loc11_37: %empty_tuple.type = tuple_literal ()
|
||||
// CHECK:STDOUT: %.loc11_21: type = where_expr %.Self [template = constants.%I.type.2] {
|
||||
// CHECK:STDOUT: %.loc11_21: type = where_expr %.Self [template = constants.%I_where.type] {
|
||||
// CHECK:STDOUT: requirement_equivalent %.Self.ref, %.loc11_37
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.param: %I.type.2 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc11_15.1: %I.type.2 = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc11_15.2 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.param: %I_where.type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc11_15.1: %I_where.type = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc11_15.2 (constants.%U)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Impls.decl: %Impls.type = fn_decl @Impls [template = constants.%Impls] {
|
||||
// CHECK:STDOUT: %V.patt.loc13_10.1: %J.type.2 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT: %V.param_patt: %J.type.2 = value_param_pattern %V.patt.loc13_10.1, runtime_param<invalid> [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT: %V.patt.loc13_10.1: %J_where.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT: %V.param_patt: %J_where.type = value_param_pattern %V.patt.loc13_10.1, runtime_param<invalid> [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type.1]
|
||||
// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.2]
|
||||
// CHECK:STDOUT: %.Self.ref: %J.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.2]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type]
|
||||
// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic = constants.%.Self.2]
|
||||
// CHECK:STDOUT: %.Self.ref: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self.2]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic = constants.%.Self.as_type.1]
|
||||
// CHECK:STDOUT: %.loc13_22: type = converted %.Self.ref, %.Self.as_type [symbolic = constants.%.Self.as_type.1]
|
||||
// CHECK:STDOUT: %.loc13_16: type = where_expr %.Self [template = constants.%J.type.2] {
|
||||
// CHECK:STDOUT: %.loc13_16: type = where_expr %.Self [template = constants.%J_where.type] {
|
||||
// CHECK:STDOUT: requirement_impls %.loc13_22, %I.ref
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %V.param: %J.type.2 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %V.loc13_10.1: %J.type.2 = bind_symbolic_name V, 0, %V.param [symbolic = %V.loc13_10.2 (constants.%V)]
|
||||
// CHECK:STDOUT: %V.param: %J_where.type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %V.loc13_10.1: %J_where.type = bind_symbolic_name V, 0, %V.param [symbolic = %V.loc13_10.2 (constants.%V)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %And.decl: %And.type = fn_decl @And [template = constants.%And] {
|
||||
// CHECK:STDOUT: %W.patt.loc15_8.1: %I.type.3 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.param_patt: %I.type.3 = value_param_pattern %W.patt.loc15_8.1, runtime_param<invalid> [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.patt.loc15_8.1: %I_where.type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.param_patt: %I_where.type = value_param_pattern %W.patt.loc15_8.1, runtime_param<invalid> [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.Self.ref.loc15_20: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type.1]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type]
|
||||
// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.Self.ref.loc15_20: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref.loc15_20 [symbolic = constants.%.Self.as_type.2]
|
||||
// CHECK:STDOUT: %.loc15_20: type = converted %.Self.ref.loc15_20, %.Self.as_type [symbolic = constants.%.Self.as_type.2]
|
||||
// CHECK:STDOUT: %.Self.ref.loc15_38: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.Self.ref.loc15_38: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %Member.ref: %assoc_type.1 = name_ref Member, @I.%assoc0 [template = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.ref.loc15_38 [symbolic = constants.%.Self.as_wit]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %.loc15_50: %empty_tuple.type = tuple_literal ()
|
||||
// CHECK:STDOUT: %.loc15_14: type = where_expr %.Self [template = constants.%I.type.3] {
|
||||
// CHECK:STDOUT: %.loc15_14: type = where_expr %.Self [template = constants.%I_where.type] {
|
||||
// CHECK:STDOUT: requirement_impls %.loc15_20, %J.ref
|
||||
// CHECK:STDOUT: requirement_equivalent %impl.elem0, %.loc15_50
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %W.param: %I.type.3 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %W.loc15_8.1: %I.type.3 = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc15_8.2 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.param: %I_where.type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %W.loc15_8.1: %I_where.type = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc15_8.2 (constants.%W)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @J {
|
||||
// CHECK:STDOUT: %Self: %J.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1]
|
||||
// CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
@@ -276,11 +232,11 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @I {
|
||||
// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self.2]
|
||||
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.2]
|
||||
// CHECK:STDOUT: %Member: type = assoc_const_decl Member [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type.1 = assoc_entity element0, %Member [template = constants.%assoc0]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type.1]
|
||||
// CHECK:STDOUT: %Second: %J.type.1 = assoc_const_decl Second [template]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type]
|
||||
// CHECK:STDOUT: %Second: %J.type = assoc_const_decl Second [template]
|
||||
// CHECK:STDOUT: %assoc1: %assoc_type.2 = assoc_entity element1, %Second [template = constants.%assoc1]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
@@ -290,25 +246,25 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: witness = (%Member, %Second)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @EqualEqual(%U.loc11_15.1: %I.type.2) {
|
||||
// CHECK:STDOUT: %U.loc11_15.2: %I.type.2 = bind_symbolic_name U, 0 [symbolic = %U.loc11_15.2 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.patt.loc11_15.2: %I.type.2 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: generic fn @EqualEqual(%U.loc11_15.1: %I_where.type) {
|
||||
// CHECK:STDOUT: %U.loc11_15.2: %I_where.type = bind_symbolic_name U, 0 [symbolic = %U.loc11_15.2 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.patt.loc11_15.2: %I_where.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%U.param_patt: %I.type.2);
|
||||
// CHECK:STDOUT: fn(%U.param_patt: %I_where.type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Impls(%V.loc13_10.1: %J.type.2) {
|
||||
// CHECK:STDOUT: %V.loc13_10.2: %J.type.2 = bind_symbolic_name V, 0 [symbolic = %V.loc13_10.2 (constants.%V)]
|
||||
// CHECK:STDOUT: %V.patt.loc13_10.2: %J.type.2 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT: generic fn @Impls(%V.loc13_10.1: %J_where.type) {
|
||||
// CHECK:STDOUT: %V.loc13_10.2: %J_where.type = bind_symbolic_name V, 0 [symbolic = %V.loc13_10.2 (constants.%V)]
|
||||
// CHECK:STDOUT: %V.patt.loc13_10.2: %J_where.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%V.param_patt: %J.type.2);
|
||||
// CHECK:STDOUT: fn(%V.param_patt: %J_where.type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @And(%W.loc15_8.1: %I.type.3) {
|
||||
// CHECK:STDOUT: %W.loc15_8.2: %I.type.3 = bind_symbolic_name W, 0 [symbolic = %W.loc15_8.2 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.patt.loc15_8.2: %I.type.3 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: generic fn @And(%W.loc15_8.1: %I_where.type) {
|
||||
// CHECK:STDOUT: %W.loc15_8.2: %I_where.type = bind_symbolic_name W, 0 [symbolic = %W.loc15_8.2 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.patt.loc15_8.2: %I_where.type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%W.param_patt: %I.type.3);
|
||||
// CHECK:STDOUT: fn(%W.param_patt: %I_where.type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @EqualEqual(constants.%U) {
|
||||
@@ -326,82 +282,6 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %W.patt.loc15_8.2 => constants.%W
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- equal_constraint.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %N.type.1: type = facet_type <@N> [template]
|
||||
// CHECK:STDOUT: %Self: %N.type.1 = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %N.type.1, type [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @N.%P [template]
|
||||
// CHECK:STDOUT: %.Self: %N.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %N.type.2: type = facet_type <@N where TODO> [template]
|
||||
// CHECK:STDOUT: %T: %N.type.2 = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: %N.type.2 = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Equal.type: type = fn_type @Equal [template]
|
||||
// CHECK:STDOUT: %Equal: %Equal.type = struct_value () [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
// CHECK:STDOUT: import Core//prelude/...
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: package: <namespace> = namespace [template] {
|
||||
// CHECK:STDOUT: .Core = imports.%Core
|
||||
// CHECK:STDOUT: .N = %N.decl
|
||||
// CHECK:STDOUT: .Equal = %Equal.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %N.decl: type = interface_decl @N [template = constants.%N.type.1] {} {}
|
||||
// CHECK:STDOUT: %Equal.decl: %Equal.type = fn_decl @Equal [template = constants.%Equal] {
|
||||
// CHECK:STDOUT: %T.patt.loc8_10.1: %N.type.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.param_patt: %N.type.2 = value_param_pattern %T.patt.loc8_10.1, runtime_param<invalid> [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %N.ref: type = name_ref N, file.%N.decl [template = constants.%N.type.1]
|
||||
// CHECK:STDOUT: %.Self: %N.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %N.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %P.ref: %assoc_type = name_ref P, @N.%assoc0 [template = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %.loc8_28.1: %empty_struct_type = struct_literal ()
|
||||
// CHECK:STDOUT: %.loc8_28.2: type = converted %.loc8_28.1, constants.%empty_struct_type [template = constants.%empty_struct_type]
|
||||
// CHECK:STDOUT: %.loc8_16: type = where_expr %.Self [template = constants.%N.type.2] {
|
||||
// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc8_28.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.param: %N.type.2 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc8_10.1: %N.type.2 = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_10.2 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @N {
|
||||
// CHECK:STDOUT: %Self: %N.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %P: type = assoc_const_decl P [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %P [template = constants.%assoc0]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: .P = %assoc0
|
||||
// CHECK:STDOUT: witness = (%P)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Equal(%T.loc8_10.1: %N.type.2) {
|
||||
// CHECK:STDOUT: %T.loc8_10.2: %N.type.2 = bind_symbolic_name T, 0 [symbolic = %T.loc8_10.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt.loc8_10.2: %N.type.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.param_patt: %N.type.2);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Equal(constants.%T) {
|
||||
// CHECK:STDOUT: %T.loc8_10.2 => constants.%T
|
||||
// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- associated_type_impls.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
@@ -409,17 +289,17 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %Self.1: %L.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %M.type: type = facet_type <@M> [template]
|
||||
// CHECK:STDOUT: %Self.2: %M.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %K.type.1: type = facet_type <@K> [template]
|
||||
// CHECK:STDOUT: %Self.3: %K.type.1 = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %K.type.1, %L.type [template]
|
||||
// CHECK:STDOUT: %K.type: type = facet_type <@K> [template]
|
||||
// CHECK:STDOUT: %Self.3: %K.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %K.type, %L.type [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @K.%Associated [template]
|
||||
// CHECK:STDOUT: %.Self: %K.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: %K.type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0: %L.type = interface_witness_access %.Self.as_wit, element0 [symbolic]
|
||||
// CHECK:STDOUT: %as_type: type = facet_access_type %impl.elem0 [symbolic]
|
||||
// CHECK:STDOUT: %K.type.2: type = facet_type <@K where TODO> [template]
|
||||
// CHECK:STDOUT: %W: %K.type.2 = bind_symbolic_name W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %W.patt: %K.type.2 = symbolic_binding_pattern W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %K_where.type: type = facet_type <@K where TODO> [template]
|
||||
// CHECK:STDOUT: %W: %K_where.type = bind_symbolic_name W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %W.patt: %K_where.type = symbolic_binding_pattern W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %AssociatedTypeImpls.type: type = fn_type @AssociatedTypeImpls [template]
|
||||
// CHECK:STDOUT: %AssociatedTypeImpls: %AssociatedTypeImpls.type = struct_value () [template]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -442,25 +322,25 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %L.decl: type = interface_decl @L [template = constants.%L.type] {} {}
|
||||
// CHECK:STDOUT: %M.decl: type = interface_decl @M [template = constants.%M.type] {} {}
|
||||
// CHECK:STDOUT: %K.decl: type = interface_decl @K [template = constants.%K.type.1] {} {}
|
||||
// CHECK:STDOUT: %K.decl: type = interface_decl @K [template = constants.%K.type] {} {}
|
||||
// CHECK:STDOUT: %AssociatedTypeImpls.decl: %AssociatedTypeImpls.type = fn_decl @AssociatedTypeImpls [template = constants.%AssociatedTypeImpls] {
|
||||
// CHECK:STDOUT: %W.patt.loc11_24.1: %K.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.param_patt: %K.type.2 = value_param_pattern %W.patt.loc11_24.1, runtime_param<invalid> [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.patt.loc11_24.1: %K_where.type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.param_patt: %K_where.type = value_param_pattern %W.patt.loc11_24.1, runtime_param<invalid> [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %K.ref: type = name_ref K, file.%K.decl [template = constants.%K.type.1]
|
||||
// CHECK:STDOUT: %.Self: %K.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %K.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %K.ref: type = name_ref K, file.%K.decl [template = constants.%K.type]
|
||||
// CHECK:STDOUT: %.Self: %K.type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %K.type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %Associated.ref: %assoc_type = name_ref Associated, @K.%assoc0 [template = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit]
|
||||
// CHECK:STDOUT: %impl.elem0: %L.type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %M.ref: type = name_ref M, file.%M.decl [template = constants.%M.type]
|
||||
// CHECK:STDOUT: %as_type: type = facet_access_type %impl.elem0 [symbolic = constants.%as_type]
|
||||
// CHECK:STDOUT: %.loc11_36: type = converted %impl.elem0, %as_type [symbolic = constants.%as_type]
|
||||
// CHECK:STDOUT: %.loc11_30: type = where_expr %.Self [template = constants.%K.type.2] {
|
||||
// CHECK:STDOUT: %.loc11_30: type = where_expr %.Self [template = constants.%K_where.type] {
|
||||
// CHECK:STDOUT: requirement_impls %.loc11_36, %M.ref
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %W.param: %K.type.2 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %W.loc11_24.1: %K.type.2 = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc11_24.2 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.param: %K_where.type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %W.loc11_24.1: %K_where.type = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc11_24.2 (constants.%W)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -481,7 +361,7 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @K {
|
||||
// CHECK:STDOUT: %Self: %K.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self.3]
|
||||
// CHECK:STDOUT: %Self: %K.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.3]
|
||||
// CHECK:STDOUT: %L.ref: type = name_ref L, file.%L.decl [template = constants.%L.type]
|
||||
// CHECK:STDOUT: %Associated: %L.type = assoc_const_decl Associated [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %Associated [template = constants.%assoc0]
|
||||
@@ -492,11 +372,11 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: witness = (%Associated)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @AssociatedTypeImpls(%W.loc11_24.1: %K.type.2) {
|
||||
// CHECK:STDOUT: %W.loc11_24.2: %K.type.2 = bind_symbolic_name W, 0 [symbolic = %W.loc11_24.2 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.patt.loc11_24.2: %K.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: generic fn @AssociatedTypeImpls(%W.loc11_24.1: %K_where.type) {
|
||||
// CHECK:STDOUT: %W.loc11_24.2: %K_where.type = bind_symbolic_name W, 0 [symbolic = %W.loc11_24.2 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.patt.loc11_24.2: %K_where.type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%W.param_patt: %K.type.2);
|
||||
// CHECK:STDOUT: fn(%W.param_patt: %K_where.type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AssociatedTypeImpls(constants.%W) {
|
||||
@@ -504,97 +384,10 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %W.patt.loc11_24.2 => constants.%W
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_check_rewrite_constraints.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type.1, type [template]
|
||||
// CHECK:STDOUT: %assoc0.1: %assoc_type = assoc_entity element0, imports.%import_ref.11 [template]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic]
|
||||
// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [template]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %X: %I.type.2 = bind_symbolic_name X, 0 [symbolic]
|
||||
// CHECK:STDOUT: %X.patt: %I.type.2 = symbolic_binding_pattern X, 0 [symbolic]
|
||||
// CHECK:STDOUT: %RewriteTypeMismatch.type: type = fn_type @RewriteTypeMismatch [template]
|
||||
// CHECK:STDOUT: %RewriteTypeMismatch: %RewriteTypeMismatch.type = struct_value () [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1 = import_ref Main//state_constraints, inst+3, unloaded
|
||||
// CHECK:STDOUT: %import_ref.2: type = import_ref Main//state_constraints, inst+7, loaded [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %import_ref.3 = import_ref Main//state_constraints, inst+35, unloaded
|
||||
// CHECK:STDOUT: %import_ref.4 = import_ref Main//state_constraints, inst+57, unloaded
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Main//state_constraints, inst+86, unloaded
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .ImplicitAs = %import_ref.12
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
// CHECK:STDOUT: import Core//prelude/...
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %import_ref.6 = import_ref Main//state_constraints, inst+9, unloaded
|
||||
// CHECK:STDOUT: %import_ref.7: %assoc_type = import_ref Main//state_constraints, inst+13, loaded [template = constants.%assoc0.1]
|
||||
// CHECK:STDOUT: %import_ref.8 = import_ref Main//state_constraints, inst+19, unloaded
|
||||
// CHECK:STDOUT: %import_ref.9 = import_ref Main//state_constraints, inst+11, unloaded
|
||||
// CHECK:STDOUT: %import_ref.10 = import_ref Main//state_constraints, inst+17, unloaded
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: package: <namespace> = namespace [template] {
|
||||
// CHECK:STDOUT: .J = imports.%import_ref.1
|
||||
// CHECK:STDOUT: .I = imports.%import_ref.2
|
||||
// CHECK:STDOUT: .EqualEqual = imports.%import_ref.3
|
||||
// CHECK:STDOUT: .Impls = imports.%import_ref.4
|
||||
// CHECK:STDOUT: .And = imports.%import_ref.5
|
||||
// CHECK:STDOUT: .Core = imports.%Core
|
||||
// CHECK:STDOUT: .RewriteTypeMismatch = %RewriteTypeMismatch.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %default.import = import <invalid>
|
||||
// CHECK:STDOUT: %RewriteTypeMismatch.decl: %RewriteTypeMismatch.type = fn_decl @RewriteTypeMismatch [template = constants.%RewriteTypeMismatch] {
|
||||
// CHECK:STDOUT: %X.patt.loc14_24.1: %I.type.2 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc14_24.2 (constants.%X.patt)]
|
||||
// CHECK:STDOUT: %X.param_patt: %I.type.2 = value_param_pattern %X.patt.loc14_24.1, runtime_param<invalid> [symbolic = %X.patt.loc14_24.2 (constants.%X.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, imports.%import_ref.2 [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %Member.ref: %assoc_type = name_ref Member, imports.%import_ref.7 [template = constants.%assoc0.1]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [template = constants.%int_2]
|
||||
// CHECK:STDOUT: %.loc14_46: type = converted %int_2, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %.loc14_30: type = where_expr %.Self [template = constants.%I.type.2] {
|
||||
// CHECK:STDOUT: requirement_rewrite %impl.elem0, <error>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %X.param: %I.type.2 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %X.loc14_24.1: %I.type.2 = bind_symbolic_name X, 0, %X.param [symbolic = %X.loc14_24.2 (constants.%X)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @I {
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = imports.%import_ref.6
|
||||
// CHECK:STDOUT: .Member = imports.%import_ref.7
|
||||
// CHECK:STDOUT: .Second = imports.%import_ref.8
|
||||
// CHECK:STDOUT: witness = (imports.%import_ref.9, imports.%import_ref.10)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @RewriteTypeMismatch(%X.loc14_24.1: %I.type.2) {
|
||||
// CHECK:STDOUT: %X.loc14_24.2: %I.type.2 = bind_symbolic_name X, 0 [symbolic = %X.loc14_24.2 (constants.%X)]
|
||||
// CHECK:STDOUT: %X.patt.loc14_24.2: %I.type.2 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc14_24.2 (constants.%X.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%X.param_patt: %I.type.2);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @RewriteTypeMismatch(constants.%X) {
|
||||
// CHECK:STDOUT: %X.loc14_24.2 => constants.%X
|
||||
// CHECK:STDOUT: %X.patt.loc14_24.2 => constants.%X
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_left_of_impls_non_type.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [template]
|
||||
// CHECK:STDOUT: %type_where: type = facet_type <type where TODO> [template]
|
||||
// CHECK:STDOUT: %U: %type_where = bind_symbolic_name U, 0 [symbolic]
|
||||
@@ -621,7 +414,7 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %U.patt.loc11_17.1: %type_where = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.param_patt: %type_where = value_param_pattern %U.patt.loc11_17.1, runtime_param<invalid> [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [template = constants.%int_7]
|
||||
// CHECK:STDOUT: %.loc11_32: type = converted %int_7, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %.loc11_26: type = where_expr %.Self [template = constants.%type_where] {
|
||||
@@ -647,7 +440,7 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: --- fail_right_of_impls_non_type.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [template]
|
||||
// CHECK:STDOUT: %type_where: type = facet_type <type where TODO> [template]
|
||||
// CHECK:STDOUT: %U: %type_where = bind_symbolic_name U, 0 [symbolic]
|
||||
@@ -674,7 +467,7 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %U.patt.loc11_17.1: %type_where = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.param_patt: %type_where = value_param_pattern %U.patt.loc11_17.1, runtime_param<invalid> [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [template = constants.%int_7]
|
||||
// CHECK:STDOUT: %.loc11_44: type = converted %int_7, <error> [template = <error>]
|
||||
@@ -701,7 +494,7 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: --- fail_right_of_impls_non_facet_type.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template]
|
||||
// CHECK:STDOUT: %Int.type: type = fn_type @Int [template]
|
||||
// CHECK:STDOUT: %Int: %Int.type = struct_value () [template]
|
||||
@@ -731,7 +524,7 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %U.patt.loc8_24.1: %type_where = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_24.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.param_patt: %type_where = value_param_pattern %U.patt.loc8_24.1, runtime_param<invalid> [symbolic = %U.patt.loc8_24.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template = constants.%int_32]
|
||||
// CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32]
|
||||
@@ -763,18 +556,18 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %C: type = class_type @C [template]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [template]
|
||||
// CHECK:STDOUT: %J.type.1: type = facet_type <@J> [template]
|
||||
// CHECK:STDOUT: %J.type: type = facet_type <@J> [template]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness () [template]
|
||||
// CHECK:STDOUT: %DoesNotImplI.type: type = fn_type @DoesNotImplI [template]
|
||||
// CHECK:STDOUT: %DoesNotImplI: %DoesNotImplI.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %Impls.type: type = fn_type @Impls [template]
|
||||
// CHECK:STDOUT: %Impls: %Impls.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %V: %J.type.1 = bind_symbolic_name V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %V.patt: %J.type.1 = symbolic_binding_pattern V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %J.type.2: type = facet_type <@J where TODO> [template]
|
||||
// CHECK:STDOUT: %Y: %J.type.2 = bind_symbolic_name Y, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Y.patt: %J.type.2 = symbolic_binding_pattern Y, 0 [symbolic]
|
||||
// CHECK:STDOUT: %J_where.type: type = facet_type <@J where TODO> [template]
|
||||
// CHECK:STDOUT: %V: %J_where.type = bind_symbolic_name V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %V.patt: %J_where.type = symbolic_binding_pattern V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %Y: %J_where.type = bind_symbolic_name Y, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Y.patt: %J_where.type = symbolic_binding_pattern Y, 0 [symbolic]
|
||||
// CHECK:STDOUT: %EmptyStruct.type: type = fn_type @EmptyStruct [template]
|
||||
// CHECK:STDOUT: %EmptyStruct: %EmptyStruct.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %NotEmptyStruct.type: type = fn_type @NotEmptyStruct [template]
|
||||
@@ -782,11 +575,11 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1: type = import_ref Main//state_constraints, inst+3, loaded [template = constants.%J.type.1]
|
||||
// CHECK:STDOUT: %import_ref.1: type = import_ref Main//state_constraints, inst+3, loaded [template = constants.%J.type]
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Main//state_constraints, inst+7, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3 = import_ref Main//state_constraints, inst+35, unloaded
|
||||
// CHECK:STDOUT: %import_ref.4: %Impls.type = import_ref Main//state_constraints, inst+57, loaded [template = constants.%Impls]
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Main//state_constraints, inst+86, unloaded
|
||||
// CHECK:STDOUT: %import_ref.5 = import_ref Main//state_constraints, inst+85, unloaded
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .ImplicitAs = %import_ref.7
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
@@ -813,22 +606,22 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {} {}
|
||||
// CHECK:STDOUT: impl_decl @impl.1 [template] {} {
|
||||
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, imports.%import_ref.1 [template = constants.%J.type.1]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, imports.%import_ref.1 [template = constants.%J.type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %DoesNotImplI.decl: %DoesNotImplI.type = fn_decl @DoesNotImplI [template = constants.%DoesNotImplI] {} {}
|
||||
// CHECK:STDOUT: %EmptyStruct.decl: %EmptyStruct.type = fn_decl @EmptyStruct [template = constants.%EmptyStruct] {
|
||||
// CHECK:STDOUT: %Y.patt.loc26_16.1: %J.type.2 = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)]
|
||||
// CHECK:STDOUT: %Y.param_patt: %J.type.2 = value_param_pattern %Y.patt.loc26_16.1, runtime_param<invalid> [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)]
|
||||
// CHECK:STDOUT: %Y.patt.loc26_16.1: %J_where.type = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)]
|
||||
// CHECK:STDOUT: %Y.param_patt: %J_where.type = value_param_pattern %Y.patt.loc26_16.1, runtime_param<invalid> [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, imports.%import_ref.1 [template = constants.%J.type.1]
|
||||
// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %J.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, imports.%import_ref.1 [template = constants.%J.type]
|
||||
// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.loc26_38: %empty_struct_type = struct_literal ()
|
||||
// CHECK:STDOUT: %.loc26_22: type = where_expr %.Self [template = constants.%J.type.2] {
|
||||
// CHECK:STDOUT: %.loc26_22: type = where_expr %.Self [template = constants.%J_where.type] {
|
||||
// CHECK:STDOUT: requirement_equivalent %.Self.ref, %.loc26_38
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Y.param: %J.type.2 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %Y.loc26_16.1: %J.type.2 = bind_symbolic_name Y, 0, %Y.param [symbolic = %Y.loc26_16.2 (constants.%Y)]
|
||||
// CHECK:STDOUT: %Y.param: %J_where.type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %Y.loc26_16.1: %J_where.type = bind_symbolic_name Y, 0, %Y.param [symbolic = %Y.loc26_16.2 (constants.%Y)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %NotEmptyStruct.decl: %NotEmptyStruct.type = fn_decl @NotEmptyStruct [template = constants.%NotEmptyStruct] {} {}
|
||||
// CHECK:STDOUT: }
|
||||
@@ -858,29 +651,29 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Impls.ref: %Impls.type = name_ref Impls, imports.%import_ref.4 [template = constants.%Impls]
|
||||
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %.loc23: %J.type.1 = converted %C.ref, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %.loc23: %J_where.type = converted %C.ref, <error> [template = <error>]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Impls(constants.%V: %J.type.1) {
|
||||
// CHECK:STDOUT: %V: %J.type.1 = bind_symbolic_name V, 0 [symbolic = %V (constants.%V)]
|
||||
// CHECK:STDOUT: %V.patt: %J.type.1 = symbolic_binding_pattern V, 0 [symbolic = %V.patt (constants.%V.patt)]
|
||||
// CHECK:STDOUT: generic fn @Impls(constants.%V: %J_where.type) {
|
||||
// CHECK:STDOUT: %V: %J_where.type = bind_symbolic_name V, 0 [symbolic = %V (constants.%V)]
|
||||
// CHECK:STDOUT: %V.patt: %J_where.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt (constants.%V.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%V.param_patt: %J.type.1);
|
||||
// CHECK:STDOUT: fn(%V.param_patt: %J_where.type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @EmptyStruct(%Y.loc26_16.1: %J.type.2) {
|
||||
// CHECK:STDOUT: %Y.loc26_16.2: %J.type.2 = bind_symbolic_name Y, 0 [symbolic = %Y.loc26_16.2 (constants.%Y)]
|
||||
// CHECK:STDOUT: %Y.patt.loc26_16.2: %J.type.2 = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)]
|
||||
// CHECK:STDOUT: generic fn @EmptyStruct(%Y.loc26_16.1: %J_where.type) {
|
||||
// CHECK:STDOUT: %Y.loc26_16.2: %J_where.type = bind_symbolic_name Y, 0 [symbolic = %Y.loc26_16.2 (constants.%Y)]
|
||||
// CHECK:STDOUT: %Y.patt.loc26_16.2: %J_where.type = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%Y.param_patt: %J.type.2);
|
||||
// CHECK:STDOUT: fn(%Y.param_patt: %J_where.type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @NotEmptyStruct() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %EmptyStruct.ref: %EmptyStruct.type = name_ref EmptyStruct, file.%EmptyStruct.decl [template = constants.%EmptyStruct]
|
||||
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %.loc40: %J.type.2 = converted %C.ref, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %.loc39: %J_where.type = converted %C.ref, <error> [template = <error>]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -894,77 +687,3 @@ let B: type where .Self impls A = D;
|
||||
// CHECK:STDOUT: %Y.patt.loc26_16.2 => constants.%Y
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_todo_let.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %A.type: type = facet_type <@A> [template]
|
||||
// CHECK:STDOUT: %Self.1: %A.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %D: type = class_type @D [template]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [template]
|
||||
// CHECK:STDOUT: %interface.1: <witness> = interface_witness () [template]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %type_where: type = facet_type <type where TODO> [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .ImplicitAs = %import_ref.1
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
// CHECK:STDOUT: import Core//prelude/...
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: package: <namespace> = namespace [template] {
|
||||
// CHECK:STDOUT: .Core = imports.%Core
|
||||
// CHECK:STDOUT: .A = %A.decl
|
||||
// CHECK:STDOUT: .D = %D.decl
|
||||
// CHECK:STDOUT: .B = @__global_init.%B
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %A.decl: type = interface_decl @A [template = constants.%A.type] {} {}
|
||||
// CHECK:STDOUT: %D.decl: type = class_decl @D [template = constants.%D] {} {}
|
||||
// CHECK:STDOUT: impl_decl @impl.1 [template] {} {
|
||||
// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [template = constants.%D]
|
||||
// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [template = constants.%A.type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %A.ref: type = name_ref A, %A.decl [template = constants.%A.type]
|
||||
// CHECK:STDOUT: %.loc14: type = where_expr %.Self [template = constants.%type_where] {
|
||||
// CHECK:STDOUT: requirement_impls %.Self.ref, %A.ref
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @A {
|
||||
// CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: impl @impl.1: %D.ref as %A.ref {
|
||||
// CHECK:STDOUT: %interface: <witness> = interface_witness () [template = constants.%interface.1]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: witness = %interface
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: class @D {
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [template = constants.%complete_type]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = constants.%D
|
||||
// CHECK:STDOUT: complete_type_witness = %complete_type
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @__global_init() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [template = constants.%D]
|
||||
// CHECK:STDOUT: %.loc14: %type_where = converted %D.ref, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %B: %type_where = bind_name B, <error>
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+58
-63
@@ -89,25 +89,24 @@ class D {
|
||||
// CHECK:STDOUT: --- success.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template]
|
||||
// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type.1, type [template]
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I> [template]
|
||||
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type, type [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @I.%Member [template]
|
||||
// CHECK:STDOUT: %.Self.1: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self.1: %I.type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %T: %I.type.2 = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: %I.type.2 = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %T: %I_where.type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: %I_where.type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %PeriodSelf.type: type = fn_type @PeriodSelf [template]
|
||||
// CHECK:STDOUT: %PeriodSelf: %PeriodSelf.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic]
|
||||
// CHECK:STDOUT: %I.type.3: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %U: %I.type.3 = bind_symbolic_name U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %U.patt: %I.type.3 = symbolic_binding_pattern U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %U: %I_where.type = bind_symbolic_name U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %U.patt: %I_where.type = symbolic_binding_pattern U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %PeriodMember.type: type = fn_type @PeriodMember [template]
|
||||
// CHECK:STDOUT: %PeriodMember: %PeriodMember.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.Self.2: type = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self.2: type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %type_where: type = facet_type <type where TODO> [template]
|
||||
// CHECK:STDOUT: %V: %type_where = bind_symbolic_name V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %V.patt: %type_where = symbolic_binding_pattern V, 0 [symbolic]
|
||||
@@ -131,45 +130,45 @@ class D {
|
||||
// CHECK:STDOUT: .TypeSelfImpls = %TypeSelfImpls.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type.1] {} {}
|
||||
// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {}
|
||||
// CHECK:STDOUT: %PeriodSelf.decl: %PeriodSelf.type = fn_decl @PeriodSelf [template = constants.%PeriodSelf] {
|
||||
// CHECK:STDOUT: %T.patt.loc8_15.1: %I.type.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.param_patt: %I.type.2 = value_param_pattern %T.patt.loc8_15.1, runtime_param<invalid> [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.patt.loc8_15.1: %I_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.param_patt: %I_where.type = value_param_pattern %T.patt.loc8_15.1, runtime_param<invalid> [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type]
|
||||
// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.loc8_37: %empty_tuple.type = tuple_literal ()
|
||||
// CHECK:STDOUT: %.loc8_21: type = where_expr %.Self [template = constants.%I.type.2] {
|
||||
// CHECK:STDOUT: %.loc8_21: type = where_expr %.Self [template = constants.%I_where.type] {
|
||||
// CHECK:STDOUT: requirement_equivalent %.Self.ref, %.loc8_37
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.param: %I.type.2 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc8_15.1: %I.type.2 = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_15.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.param: %I_where.type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc8_15.1: %I_where.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_15.2 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %PeriodMember.decl: %PeriodMember.type = fn_decl @PeriodMember [template = constants.%PeriodMember] {
|
||||
// CHECK:STDOUT: %U.patt.loc10_17.1: %I.type.3 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.param_patt: %I.type.3 = value_param_pattern %U.patt.loc10_17.1, runtime_param<invalid> [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.patt.loc10_17.1: %I_where.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.param_patt: %I_where.type = value_param_pattern %U.patt.loc10_17.1, runtime_param<invalid> [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type]
|
||||
// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1]
|
||||
// CHECK:STDOUT: %Member.ref: %assoc_type = name_ref Member, @I.%assoc0 [template = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %.loc10_41: %empty_tuple.type = tuple_literal ()
|
||||
// CHECK:STDOUT: %.loc10_23: type = where_expr %.Self [template = constants.%I.type.3] {
|
||||
// CHECK:STDOUT: %.loc10_23: type = where_expr %.Self [template = constants.%I_where.type] {
|
||||
// CHECK:STDOUT: requirement_equivalent %impl.elem0, %.loc10_41
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.param: %I.type.3 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc10_17.1: %I.type.3 = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc10_17.2 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.param: %I_where.type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc10_17.1: %I_where.type = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc10_17.2 (constants.%U)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %TypeSelfImpls.decl: %TypeSelfImpls.type = fn_decl @TypeSelfImpls [template = constants.%TypeSelfImpls] {
|
||||
// CHECK:STDOUT: %V.patt.loc12_18.1: %type_where = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc12_18.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT: %V.param_patt: %type_where = value_param_pattern %V.patt.loc12_18.1, runtime_param<invalid> [symbolic = %V.patt.loc12_18.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.2]
|
||||
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self.2]
|
||||
// CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self.2]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type]
|
||||
// CHECK:STDOUT: %.loc12: type = where_expr %.Self [template = constants.%type_where] {
|
||||
// CHECK:STDOUT: requirement_impls %.Self.ref, %I.ref
|
||||
// CHECK:STDOUT: }
|
||||
@@ -179,7 +178,7 @@ class D {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @I {
|
||||
// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %Member: type = assoc_const_decl Member [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %Member [template = constants.%assoc0]
|
||||
// CHECK:STDOUT:
|
||||
@@ -189,18 +188,18 @@ class D {
|
||||
// CHECK:STDOUT: witness = (%Member)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @PeriodSelf(%T.loc8_15.1: %I.type.2) {
|
||||
// CHECK:STDOUT: %T.loc8_15.2: %I.type.2 = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt.loc8_15.2: %I.type.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: generic fn @PeriodSelf(%T.loc8_15.1: %I_where.type) {
|
||||
// CHECK:STDOUT: %T.loc8_15.2: %I_where.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt.loc8_15.2: %I_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.param_patt: %I.type.2);
|
||||
// CHECK:STDOUT: fn(%T.param_patt: %I_where.type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @PeriodMember(%U.loc10_17.1: %I.type.3) {
|
||||
// CHECK:STDOUT: %U.loc10_17.2: %I.type.3 = bind_symbolic_name U, 0 [symbolic = %U.loc10_17.2 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.patt.loc10_17.2: %I.type.3 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: generic fn @PeriodMember(%U.loc10_17.1: %I_where.type) {
|
||||
// CHECK:STDOUT: %U.loc10_17.2: %I_where.type = bind_symbolic_name U, 0 [symbolic = %U.loc10_17.2 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.patt.loc10_17.2: %I_where.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%U.param_patt: %I.type.3);
|
||||
// CHECK:STDOUT: fn(%U.param_patt: %I_where.type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @TypeSelfImpls(%V.loc12_18.1: %type_where) {
|
||||
@@ -228,15 +227,13 @@ class D {
|
||||
// CHECK:STDOUT: --- fail_wrong_member.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %J.type.1: type = facet_type <@J> [template]
|
||||
// CHECK:STDOUT: %Self: %J.type.1 = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %J.type.1, type [template]
|
||||
// CHECK:STDOUT: %J.type: type = facet_type <@J> [template]
|
||||
// CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %J.type, type [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @J.%Member [template]
|
||||
// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %J.type.2: type = facet_type <@J where TODO> [template]
|
||||
// CHECK:STDOUT: %W: %J.type.2 = bind_symbolic_name W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %W.patt: %J.type.2 = symbolic_binding_pattern W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %W.patt: <error> = symbolic_binding_pattern W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %PeriodMismatch.type: type = fn_type @PeriodMismatch [template]
|
||||
// CHECK:STDOUT: %PeriodMismatch: %PeriodMismatch.type = struct_value () [template]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -255,26 +252,26 @@ class D {
|
||||
// CHECK:STDOUT: .PeriodMismatch = %PeriodMismatch.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %J.decl: type = interface_decl @J [template = constants.%J.type.1] {} {}
|
||||
// CHECK:STDOUT: %J.decl: type = interface_decl @J [template = constants.%J.type] {} {}
|
||||
// CHECK:STDOUT: %PeriodMismatch.decl: %PeriodMismatch.type = fn_decl @PeriodMismatch [template = constants.%PeriodMismatch] {
|
||||
// CHECK:STDOUT: %W.patt.loc12_19.1: %J.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.param_patt: %J.type.2 = value_param_pattern %W.patt.loc12_19.1, runtime_param<invalid> [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.patt.loc12_19.1: <error> = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.param_patt: <error> = value_param_pattern %W.patt.loc12_19.1, runtime_param<invalid> [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type.1]
|
||||
// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %J.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type]
|
||||
// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %Mismatch.ref: <error> = name_ref Mismatch, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %.loc12_44: %empty_struct_type = struct_literal ()
|
||||
// CHECK:STDOUT: %.loc12_25: type = where_expr %.Self [template = constants.%J.type.2] {
|
||||
// CHECK:STDOUT: %.loc12_25: type = where_expr %.Self [template = <error>] {
|
||||
// CHECK:STDOUT: requirement_rewrite %Mismatch.ref, <error>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %W.param: %J.type.2 = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %W.loc12_19.1: %J.type.2 = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc12_19.2 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.param: <error> = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %W: <error> = bind_symbolic_name W, 0, %W.param [template = <error>]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @J {
|
||||
// CHECK:STDOUT: %Self: %J.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %Member: type = assoc_const_decl Member [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %Member [template = constants.%assoc0]
|
||||
// CHECK:STDOUT:
|
||||
@@ -284,16 +281,14 @@ class D {
|
||||
// CHECK:STDOUT: witness = (%Member)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @PeriodMismatch(%W.loc12_19.1: %J.type.2) {
|
||||
// CHECK:STDOUT: %W.loc12_19.2: %J.type.2 = bind_symbolic_name W, 0 [symbolic = %W.loc12_19.2 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.patt.loc12_19.2: %J.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: generic fn @PeriodMismatch(%W: <error>) {
|
||||
// CHECK:STDOUT: %W.patt.loc12_19.2: <error> = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%W.param_patt: %J.type.2);
|
||||
// CHECK:STDOUT: fn(%W.param_patt: <error>);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @PeriodMismatch(constants.%W) {
|
||||
// CHECK:STDOUT: %W.loc12_19.2 => constants.%W
|
||||
// CHECK:STDOUT: %W.patt.loc12_19.2 => constants.%W
|
||||
// CHECK:STDOUT: specific @PeriodMismatch(<error>) {
|
||||
// CHECK:STDOUT: %W.patt.loc12_19.2 => <error>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_designator_matches_var.carbon
|
||||
|
||||
@@ -0,0 +1,279 @@
|
||||
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
||||
// Exceptions. See /LICENSE for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
// AUTOUPDATE
|
||||
// TIP: To test this file alone, run:
|
||||
// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/where_expr/dot_self_index.carbon
|
||||
// TIP: To dump output, run:
|
||||
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/where_expr/dot_self_index.carbon
|
||||
|
||||
interface Empty(W:! type) {
|
||||
let A:! type;
|
||||
}
|
||||
|
||||
// T has index 0
|
||||
// .Self has index invalid, not 1
|
||||
// V has index 1, does not match .Self
|
||||
fn H(T:! type, U: Empty(T) where .A = T*, V:! type) {}
|
||||
|
||||
fn G(U: Empty(i32) where .A = i32*) {
|
||||
H(i32, U, bool);
|
||||
}
|
||||
|
||||
// CHECK:STDOUT: --- dot_self_index.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %W: type = bind_symbolic_name W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %W.patt: type = symbolic_binding_pattern W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Empty.type.1: type = generic_interface_type @Empty [template]
|
||||
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template]
|
||||
// CHECK:STDOUT: %Empty.generic: %Empty.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %Empty.type.2: type = facet_type <@Empty, @Empty(%W)> [symbolic]
|
||||
// CHECK:STDOUT: %Self: %Empty.type.2 = bind_symbolic_name Self, 1 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type.1: type = assoc_entity_type %Empty.type.2, type [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.1: %assoc_type.1 = assoc_entity element0, @Empty.%A [symbolic]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Empty.type.3: type = facet_type <@Empty, @Empty(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %.Self.1: %Empty.type.3 = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type.2: type = assoc_entity_type %Empty.type.3, type [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.2: %assoc_type.2 = assoc_entity element0, @Empty.%A [symbolic]
|
||||
// CHECK:STDOUT: %.Self.as_wit.1: <witness> = facet_access_witness %.Self.1 [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0.1: type = interface_witness_access %.Self.as_wit.1, element0 [symbolic]
|
||||
// CHECK:STDOUT: %ptr.1: type = ptr_type %T [symbolic]
|
||||
// CHECK:STDOUT: %Empty_where.type.1: type = facet_type <@Empty, @Empty(%T) where %impl.elem0.1 = %ptr.1> [symbolic]
|
||||
// CHECK:STDOUT: %V: type = bind_symbolic_name V, 1 [symbolic]
|
||||
// CHECK:STDOUT: %V.patt: type = symbolic_binding_pattern V, 1 [symbolic]
|
||||
// CHECK:STDOUT: %H.type: type = fn_type @H [template]
|
||||
// CHECK:STDOUT: %H: %H.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template]
|
||||
// CHECK:STDOUT: %Int.type: type = fn_type @Int [template]
|
||||
// CHECK:STDOUT: %Int: %Int.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template]
|
||||
// CHECK:STDOUT: %Empty.type.4: type = facet_type <@Empty, @Empty(%i32)> [template]
|
||||
// CHECK:STDOUT: %.Self.2: %Empty.type.4 = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type.3: type = assoc_entity_type %Empty.type.4, type [template]
|
||||
// CHECK:STDOUT: %assoc0.3: %assoc_type.3 = assoc_entity element0, @Empty.%A [template]
|
||||
// CHECK:STDOUT: %.Self.as_wit.2: <witness> = facet_access_witness %.Self.2 [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0.2: type = interface_witness_access %.Self.as_wit.2, element0 [symbolic]
|
||||
// CHECK:STDOUT: %ptr.2: type = ptr_type %i32 [template]
|
||||
// CHECK:STDOUT: %Empty_where.type.2: type = facet_type <@Empty, @Empty(%i32) where %impl.elem0.2 = %ptr.2> [template]
|
||||
// CHECK:STDOUT: %G.type: type = fn_type @G [template]
|
||||
// CHECK:STDOUT: %G: %G.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template]
|
||||
// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %H.specific_fn: <specific function> = specific_function %H, @H(%i32, bool) [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] {
|
||||
// CHECK:STDOUT: .Int = %import_ref.1
|
||||
// CHECK:STDOUT: .Bool = %import_ref.2
|
||||
// CHECK:STDOUT: import Core//prelude
|
||||
// CHECK:STDOUT: import Core//prelude/...
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: package: <namespace> = namespace [template] {
|
||||
// CHECK:STDOUT: .Core = imports.%Core
|
||||
// CHECK:STDOUT: .Empty = %Empty.decl
|
||||
// CHECK:STDOUT: .H = %H.decl
|
||||
// CHECK:STDOUT: .G = %G.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %Empty.decl: %Empty.type.1 = interface_decl @Empty [template = constants.%Empty.generic] {
|
||||
// CHECK:STDOUT: %W.patt.loc11_17.1: type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_17.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: %W.param_patt: type = value_param_pattern %W.patt.loc11_17.1, runtime_param<invalid> [symbolic = %W.patt.loc11_17.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %W.param: type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %W.loc11_17.1: type = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc11_17.2 (constants.%W)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [template = constants.%H] {
|
||||
// CHECK:STDOUT: %T.patt.loc18_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_6.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.param_patt: type = value_param_pattern %T.patt.loc18_6.1, runtime_param<invalid> [symbolic = %T.patt.loc18_6.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %U.patt: @H.%Empty_where.type (%Empty_where.type.1) = binding_pattern U
|
||||
// CHECK:STDOUT: %U.param_patt: @H.%Empty_where.type (%Empty_where.type.1) = value_param_pattern %U.patt, runtime_param0
|
||||
// CHECK:STDOUT: %V.patt.loc18_43.1: type = symbolic_binding_pattern V, 1 [symbolic = %V.patt.loc18_43.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT: %V.param_patt: type = value_param_pattern %V.patt.loc18_43.1, runtime_param<invalid> [symbolic = %V.patt.loc18_43.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %Empty.ref: %Empty.type.1 = name_ref Empty, file.%Empty.decl [template = constants.%Empty.generic]
|
||||
// CHECK:STDOUT: %T.ref.loc18_25: type = name_ref T, %T.loc18_6.1 [symbolic = %T.loc18_6.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %Empty.type.loc18_26.1: type = facet_type <@Empty, @Empty(constants.%T)> [symbolic = %Empty.type.loc18_26.2 (constants.%Empty.type.3)]
|
||||
// CHECK:STDOUT: %.Self.1: @H.%Empty.type.loc18_26.2 (%Empty.type.3) = bind_symbolic_name .Self [symbolic = %.Self.2 (constants.%.Self.1)]
|
||||
// CHECK:STDOUT: %.Self.ref: @H.%Empty.type.loc18_26.2 (%Empty.type.3) = name_ref .Self, %.Self.1 [symbolic = %.Self.2 (constants.%.Self.1)]
|
||||
// CHECK:STDOUT: %.loc18_34: @H.%assoc_type (%assoc_type.2) = specific_constant @Empty.%assoc0.loc12_15.1, @Empty(constants.%T) [symbolic = %assoc0 (constants.%assoc0.2)]
|
||||
// CHECK:STDOUT: %A.ref: @H.%assoc_type (%assoc_type.2) = name_ref A, %.loc18_34 [symbolic = %assoc0 (constants.%assoc0.2)]
|
||||
// CHECK:STDOUT: %.Self.as_wit.loc18_34.1: <witness> = facet_access_witness %.Self.ref [symbolic = %.Self.as_wit.loc18_34.2 (constants.%.Self.as_wit.1)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc18_34.1: type = interface_witness_access %.Self.as_wit.loc18_34.1, element0 [symbolic = %impl.elem0.loc18_34.2 (constants.%impl.elem0.1)]
|
||||
// CHECK:STDOUT: %T.ref.loc18_39: type = name_ref T, %T.loc18_6.1 [symbolic = %T.loc18_6.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc18_40.1: type = ptr_type %T [symbolic = %ptr.loc18_40.2 (constants.%ptr.1)]
|
||||
// CHECK:STDOUT: %.loc18_28: type = where_expr %.Self.1 [symbolic = %Empty_where.type (constants.%Empty_where.type.1)] {
|
||||
// CHECK:STDOUT: requirement_rewrite %impl.elem0.loc18_34.1, %ptr.loc18_40.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.param: type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc18_6.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc18_6.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.param: @H.%Empty_where.type (%Empty_where.type.1) = value_param runtime_param0
|
||||
// CHECK:STDOUT: %U: @H.%Empty_where.type (%Empty_where.type.1) = bind_name U, %U.param
|
||||
// CHECK:STDOUT: %V.param: type = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %V.loc18_43.1: type = bind_symbolic_name V, 1, %V.param [symbolic = %V.loc18_43.2 (constants.%V)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
|
||||
// CHECK:STDOUT: %U.patt: %Empty_where.type.2 = binding_pattern U
|
||||
// CHECK:STDOUT: %U.param_patt: %Empty_where.type.2 = value_param_pattern %U.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %Empty.ref: %Empty.type.1 = name_ref Empty, file.%Empty.decl [template = constants.%Empty.generic]
|
||||
// CHECK:STDOUT: %int_32.loc20_15: Core.IntLiteral = int_value 32 [template = constants.%int_32]
|
||||
// CHECK:STDOUT: %int.make_type_signed.loc20_15: init type = call constants.%Int(%int_32.loc20_15) [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc20_18.1: type = value_of_initializer %int.make_type_signed.loc20_15 [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc20_18.2: type = converted %int.make_type_signed.loc20_15, %.loc20_18.1 [template = constants.%i32]
|
||||
// CHECK:STDOUT: %Empty.type: type = facet_type <@Empty, @Empty(constants.%i32)> [template = constants.%Empty.type.4]
|
||||
// CHECK:STDOUT: %.Self: %Empty.type.4 = bind_symbolic_name .Self [symbolic = constants.%.Self.2]
|
||||
// CHECK:STDOUT: %.Self.ref: %Empty.type.4 = name_ref .Self, %.Self [symbolic = constants.%.Self.2]
|
||||
// CHECK:STDOUT: %.loc20_26: %assoc_type.3 = specific_constant @Empty.%assoc0.loc12_15.1, @Empty(constants.%i32) [template = constants.%assoc0.3]
|
||||
// CHECK:STDOUT: %A.ref: %assoc_type.3 = name_ref A, %.loc20_26 [template = constants.%assoc0.3]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit.2]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0.2]
|
||||
// CHECK:STDOUT: %int_32.loc20_31: Core.IntLiteral = int_value 32 [template = constants.%int_32]
|
||||
// CHECK:STDOUT: %int.make_type_signed.loc20_31: init type = call constants.%Int(%int_32.loc20_31) [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc20_34.1: type = value_of_initializer %int.make_type_signed.loc20_31 [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc20_34.2: type = converted %int.make_type_signed.loc20_31, %.loc20_34.1 [template = constants.%i32]
|
||||
// CHECK:STDOUT: %ptr: type = ptr_type %i32 [template = constants.%ptr.2]
|
||||
// CHECK:STDOUT: %.loc20_20: type = where_expr %.Self [template = constants.%Empty_where.type.2] {
|
||||
// CHECK:STDOUT: requirement_rewrite %impl.elem0, %ptr
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.param: %Empty_where.type.2 = value_param runtime_param0
|
||||
// CHECK:STDOUT: %U: %Empty_where.type.2 = bind_name U, %U.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic interface @Empty(%W.loc11_17.1: type) {
|
||||
// CHECK:STDOUT: %W.loc11_17.2: type = bind_symbolic_name W, 0 [symbolic = %W.loc11_17.2 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.patt.loc11_17.2: type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_17.2 (constants.%W.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Empty.type: type = facet_type <@Empty, @Empty(%W.loc11_17.2)> [symbolic = %Empty.type (constants.%Empty.type.2)]
|
||||
// CHECK:STDOUT: %Self.2: %Empty.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type @Empty.%Empty.type (%Empty.type.2), type [symbolic = %assoc_type (constants.%assoc_type.1)]
|
||||
// CHECK:STDOUT: %assoc0.loc12_15.2: @Empty.%assoc_type (%assoc_type.1) = assoc_entity element0, %A [symbolic = %assoc0.loc12_15.2 (constants.%assoc0.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.1: @Empty.%Empty.type (%Empty.type.2) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)]
|
||||
// CHECK:STDOUT: %A: type = assoc_const_decl A [template]
|
||||
// CHECK:STDOUT: %assoc0.loc12_15.1: @Empty.%assoc_type (%assoc_type.1) = assoc_entity element0, %A [symbolic = %assoc0.loc12_15.2 (constants.%assoc0.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.1
|
||||
// CHECK:STDOUT: .A = %assoc0.loc12_15.1
|
||||
// CHECK:STDOUT: witness = (%A)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @H(%T.loc18_6.1: type, %V.loc18_43.1: type) {
|
||||
// CHECK:STDOUT: %T.loc18_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc18_6.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt.loc18_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_6.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %Empty.type.loc18_26.2: type = facet_type <@Empty, @Empty(%T.loc18_6.2)> [symbolic = %Empty.type.loc18_26.2 (constants.%Empty.type.3)]
|
||||
// CHECK:STDOUT: %.Self.2: @H.%Empty.type.loc18_26.2 (%Empty.type.3) = bind_symbolic_name .Self [symbolic = %.Self.2 (constants.%.Self.1)]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type @H.%Empty.type.loc18_26.2 (%Empty.type.3), type [symbolic = %assoc_type (constants.%assoc_type.2)]
|
||||
// CHECK:STDOUT: %assoc0: @H.%assoc_type (%assoc_type.2) = assoc_entity element0, @Empty.%A [symbolic = %assoc0 (constants.%assoc0.2)]
|
||||
// CHECK:STDOUT: %.Self.as_wit.loc18_34.2: <witness> = facet_access_witness %.Self.2 [symbolic = %.Self.as_wit.loc18_34.2 (constants.%.Self.as_wit.1)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc18_34.2: type = interface_witness_access %.Self.as_wit.loc18_34.2, element0 [symbolic = %impl.elem0.loc18_34.2 (constants.%impl.elem0.1)]
|
||||
// CHECK:STDOUT: %ptr.loc18_40.2: type = ptr_type @H.%T.loc18_6.2 (%T) [symbolic = %ptr.loc18_40.2 (constants.%ptr.1)]
|
||||
// CHECK:STDOUT: %Empty_where.type: type = facet_type <@Empty, @Empty(%T.loc18_6.2) where %impl.elem0.loc18_34.2 (constants.%impl.elem0.1) = %ptr.loc18_40.2 (constants.%ptr.1)> [symbolic = %Empty_where.type (constants.%Empty_where.type.1)]
|
||||
// CHECK:STDOUT: %V.loc18_43.2: type = bind_symbolic_name V, 1 [symbolic = %V.loc18_43.2 (constants.%V)]
|
||||
// CHECK:STDOUT: %V.patt.loc18_43.2: type = symbolic_binding_pattern V, 1 [symbolic = %V.patt.loc18_43.2 (constants.%V.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.param_patt: type, %U.param_patt: @H.%Empty_where.type (%Empty_where.type.1), %V.param_patt: type) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @G(%U.param_patt: %Empty_where.type.2) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %H.ref: %H.type = name_ref H, file.%H.decl [template = constants.%H]
|
||||
// CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [template = constants.%int_32]
|
||||
// CHECK:STDOUT: %int.make_type_signed.loc21: init type = call constants.%Int(%int_32.loc21) [template = constants.%i32]
|
||||
// CHECK:STDOUT: %U.ref: %Empty_where.type.2 = name_ref U, %U
|
||||
// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool]
|
||||
// CHECK:STDOUT: %.loc21_17.1: type = value_of_initializer %int.make_type_signed.loc21 [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc21_17.2: type = converted %int.make_type_signed.loc21, %.loc21_17.1 [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc21_17.3: type = value_of_initializer %bool.make_type [template = bool]
|
||||
// CHECK:STDOUT: %.loc21_17.4: type = converted %bool.make_type, %.loc21_17.3 [template = bool]
|
||||
// CHECK:STDOUT: %H.specific_fn: <specific function> = specific_function %H.ref, @H(constants.%i32, bool) [template = constants.%H.specific_fn]
|
||||
// CHECK:STDOUT: %H.call: init %empty_tuple.type = call %H.specific_fn(%U.ref)
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Empty(constants.%W) {
|
||||
// CHECK:STDOUT: %W.loc11_17.2 => constants.%W
|
||||
// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%W
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Empty(%W.loc11_17.2) {
|
||||
// CHECK:STDOUT: %W.loc11_17.2 => constants.%W
|
||||
// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%W
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Empty(constants.%T) {
|
||||
// CHECK:STDOUT: %W.loc11_17.2 => constants.%T
|
||||
// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%T
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Empty.type => constants.%Empty.type.3
|
||||
// CHECK:STDOUT: %Self.2 => constants.%Self
|
||||
// CHECK:STDOUT: %assoc_type => constants.%assoc_type.2
|
||||
// CHECK:STDOUT: %assoc0.loc12_15.2 => constants.%assoc0.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Empty(@H.%T.loc18_6.2) {
|
||||
// CHECK:STDOUT: %W.loc11_17.2 => constants.%T
|
||||
// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @H(constants.%T, constants.%V) {
|
||||
// CHECK:STDOUT: %T.loc18_6.2 => constants.%T
|
||||
// CHECK:STDOUT: %T.patt.loc18_6.2 => constants.%T
|
||||
// CHECK:STDOUT: %Empty.type.loc18_26.2 => constants.%Empty.type.3
|
||||
// CHECK:STDOUT: %.Self.2 => constants.%.Self.1
|
||||
// CHECK:STDOUT: %assoc_type => constants.%assoc_type.2
|
||||
// CHECK:STDOUT: %assoc0 => constants.%assoc0.2
|
||||
// CHECK:STDOUT: %.Self.as_wit.loc18_34.2 => constants.%.Self.as_wit.1
|
||||
// CHECK:STDOUT: %impl.elem0.loc18_34.2 => constants.%impl.elem0.1
|
||||
// CHECK:STDOUT: %ptr.loc18_40.2 => constants.%ptr.1
|
||||
// CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.1
|
||||
// CHECK:STDOUT: %V.loc18_43.2 => constants.%V
|
||||
// CHECK:STDOUT: %V.patt.loc18_43.2 => constants.%V
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Empty(constants.%i32) {
|
||||
// CHECK:STDOUT: %W.loc11_17.2 => constants.%i32
|
||||
// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%i32
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Empty.type => constants.%Empty.type.4
|
||||
// CHECK:STDOUT: %Self.2 => constants.%Self
|
||||
// CHECK:STDOUT: %assoc_type => constants.%assoc_type.3
|
||||
// CHECK:STDOUT: %assoc0.loc12_15.2 => constants.%assoc0.3
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @H(constants.%i32, bool) {
|
||||
// CHECK:STDOUT: %T.loc18_6.2 => constants.%i32
|
||||
// CHECK:STDOUT: %T.patt.loc18_6.2 => constants.%i32
|
||||
// CHECK:STDOUT: %Empty.type.loc18_26.2 => constants.%Empty.type.4
|
||||
// CHECK:STDOUT: %.Self.2 => constants.%.Self.2
|
||||
// CHECK:STDOUT: %assoc_type => constants.%assoc_type.3
|
||||
// CHECK:STDOUT: %assoc0 => constants.%assoc0.3
|
||||
// CHECK:STDOUT: %.Self.as_wit.loc18_34.2 => constants.%.Self.as_wit.2
|
||||
// CHECK:STDOUT: %impl.elem0.loc18_34.2 => constants.%impl.elem0.2
|
||||
// CHECK:STDOUT: %ptr.loc18_40.2 => constants.%ptr.2
|
||||
// CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.2
|
||||
// CHECK:STDOUT: %V.loc18_43.2 => bool
|
||||
// CHECK:STDOUT: %V.patt.loc18_43.2 => bool
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
File diff suppressed because it is too large
Load Diff
+14
-23
@@ -44,10 +44,8 @@ var v: e where .x = 3;
|
||||
// CHECK:STDOUT: %Int.type: type = fn_type @Int [template]
|
||||
// CHECK:STDOUT: %Int: %Int.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template]
|
||||
// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template]
|
||||
// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: <error> = bind_symbolic_name T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %T.patt: <error> = symbolic_binding_pattern T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [template]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [template]
|
||||
@@ -76,36 +74,32 @@ var v: e where .x = 3;
|
||||
// CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc8_10.1: type = value_of_initializer %int.make_type_signed [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc8_10.2: type = converted %int.make_type_signed, %.loc8_10.1 [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: <error> = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self [template = <error>]
|
||||
// CHECK:STDOUT: %.Self.ref: <error> = name_ref .Self, %.Self [template = <error>]
|
||||
// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool]
|
||||
// CHECK:STDOUT: %.loc8_14: type = where_expr %.Self [template = <error>] {
|
||||
// CHECK:STDOUT: requirement_equivalent %.Self.ref, %bool.make_type
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.param: <error> = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc8_6.1: <error> = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_6.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T: <error> = bind_symbolic_name T, 0, %T.param [template = <error>]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc8_6.1: <error>) {
|
||||
// CHECK:STDOUT: %T.loc8_6.2: <error> = bind_symbolic_name T, 0 [symbolic = %T.loc8_6.2 (constants.%T)]
|
||||
// CHECK:STDOUT: generic fn @F(%T: <error>) {
|
||||
// CHECK:STDOUT: %T.patt.loc8_6.2: <error> = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.param_patt: <error>);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%T) {
|
||||
// CHECK:STDOUT: %T.loc8_6.2 => constants.%T
|
||||
// CHECK:STDOUT: %T.patt.loc8_6.2 => constants.%T
|
||||
// CHECK:STDOUT: specific @F(<error>) {
|
||||
// CHECK:STDOUT: %T.patt.loc8_6.2 => <error>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_left_where_unknown.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template]
|
||||
// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %U: <error> = bind_symbolic_name U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %U.patt: <error> = symbolic_binding_pattern U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %G.type: type = fn_type @G [template]
|
||||
// CHECK:STDOUT: %G: %G.type = struct_value () [template]
|
||||
@@ -130,33 +124,30 @@ var v: e where .x = 3;
|
||||
// CHECK:STDOUT: %U.param_patt: <error> = value_param_pattern %U.patt.loc8_6.1, runtime_param<invalid> [symbolic = %U.patt.loc8_6.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %NOT_DECLARED.ref: <error> = name_ref NOT_DECLARED, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: <error> = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self [template = <error>]
|
||||
// CHECK:STDOUT: %.Self.ref: <error> = name_ref .Self, %.Self [template = <error>]
|
||||
// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool]
|
||||
// CHECK:STDOUT: %.loc8: type = where_expr %.Self [template = <error>] {
|
||||
// CHECK:STDOUT: requirement_equivalent %.Self.ref, %bool.make_type
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.param: <error> = value_param runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc8_6.1: <error> = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc8_6.2 (constants.%U)]
|
||||
// CHECK:STDOUT: %U: <error> = bind_symbolic_name U, 0, %U.param [template = <error>]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @G(%U.loc8_6.1: <error>) {
|
||||
// CHECK:STDOUT: %U.loc8_6.2: <error> = bind_symbolic_name U, 0 [symbolic = %U.loc8_6.2 (constants.%U)]
|
||||
// CHECK:STDOUT: generic fn @G(%U: <error>) {
|
||||
// CHECK:STDOUT: %U.patt.loc8_6.2: <error> = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_6.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%U.param_patt: <error>);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @G(constants.%U) {
|
||||
// CHECK:STDOUT: %U.loc8_6.2 => constants.%U
|
||||
// CHECK:STDOUT: %U.patt.loc8_6.2 => constants.%U
|
||||
// CHECK:STDOUT: specific @G(<error>) {
|
||||
// CHECK:STDOUT: %U.patt.loc8_6.2 => <error>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_var.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -174,8 +165,8 @@ var v: e where .x = 3;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %e.ref: <error> = name_ref e, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: <error> = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self [template = <error>]
|
||||
// CHECK:STDOUT: %.Self.ref: <error> = name_ref .Self, %.Self [template = <error>]
|
||||
// CHECK:STDOUT: %x.ref: <error> = name_ref x, <error> [template = <error>]
|
||||
// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [template = constants.%int_3]
|
||||
// CHECK:STDOUT: %.loc7: type = where_expr %.Self [template = <error>] {
|
||||
|
||||
+16
-16
@@ -16,18 +16,18 @@ fn NotGenericF(U: I where .T == i32) {}
|
||||
// CHECK:STDOUT: --- non_generic.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template]
|
||||
// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type.1, type [template]
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I> [template]
|
||||
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type, type [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @I.%T [template]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template]
|
||||
// CHECK:STDOUT: %Int.type: type = fn_type @Int [template]
|
||||
// CHECK:STDOUT: %Int: %Int.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template]
|
||||
// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [template]
|
||||
// CHECK:STDOUT: %NotGenericF.type: type = fn_type @NotGenericF [template]
|
||||
// CHECK:STDOUT: %NotGenericF: %NotGenericF.type = struct_value () [template]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -47,29 +47,29 @@ fn NotGenericF(U: I where .T == i32) {}
|
||||
// CHECK:STDOUT: .NotGenericF = %NotGenericF.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type.1] {} {}
|
||||
// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {}
|
||||
// CHECK:STDOUT: %NotGenericF.decl: %NotGenericF.type = fn_decl @NotGenericF [template = constants.%NotGenericF] {
|
||||
// CHECK:STDOUT: %U.patt: %I.type.2 = binding_pattern U
|
||||
// CHECK:STDOUT: %U.param_patt: %I.type.2 = value_param_pattern %U.patt, runtime_param0
|
||||
// CHECK:STDOUT: %U.patt: %I_where.type = binding_pattern U
|
||||
// CHECK:STDOUT: %U.param_patt: %I_where.type = value_param_pattern %U.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1]
|
||||
// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type]
|
||||
// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self]
|
||||
// CHECK:STDOUT: %T.ref: %assoc_type = name_ref T, @I.%assoc0 [template = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_wit: <witness> = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit]
|
||||
// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template = constants.%int_32]
|
||||
// CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc14: type = where_expr %.Self [template = constants.%I.type.2] {
|
||||
// CHECK:STDOUT: %.loc14: type = where_expr %.Self [template = constants.%I_where.type] {
|
||||
// CHECK:STDOUT: requirement_equivalent %impl.elem0, %int.make_type_signed
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.param: %I.type.2 = value_param runtime_param0
|
||||
// CHECK:STDOUT: %U: %I.type.2 = bind_name U, %U.param
|
||||
// CHECK:STDOUT: %U.param: %I_where.type = value_param runtime_param0
|
||||
// CHECK:STDOUT: %U: %I_where.type = bind_name U, %U.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @I {
|
||||
// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %T: type = assoc_const_decl T [template]
|
||||
// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %T [template = constants.%assoc0]
|
||||
// CHECK:STDOUT:
|
||||
@@ -79,7 +79,7 @@ fn NotGenericF(U: I where .T == i32) {}
|
||||
// CHECK:STDOUT: witness = (%T)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @NotGenericF(%U.param_patt: %I.type.2) {
|
||||
// CHECK:STDOUT: fn @NotGenericF(%U.param_patt: %I_where.type) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
@@ -71,6 +71,7 @@ cc_library(
|
||||
"builtin_function_kind.cpp",
|
||||
"class.cpp",
|
||||
"constant.cpp",
|
||||
"facet_type_info.cpp",
|
||||
"file.cpp",
|
||||
"function.cpp",
|
||||
"generic.cpp",
|
||||
|
||||
@@ -8,21 +8,22 @@
|
||||
|
||||
namespace Carbon::SemIR {
|
||||
|
||||
auto ConstantStore::GetOrAdd(Inst inst, bool is_symbolic) -> ConstantId {
|
||||
auto ConstantStore::GetOrAdd(Inst inst, PhaseKind phase) -> ConstantId {
|
||||
auto result = map_.Insert(inst, [&] {
|
||||
auto inst_id = sem_ir_->insts().AddInNoBlock(LocIdAndInst::NoLoc(inst));
|
||||
ConstantId const_id = ConstantId::Invalid;
|
||||
if (is_symbolic) {
|
||||
if (phase == IsTemplate) {
|
||||
const_id = SemIR::ConstantId::ForTemplateConstant(inst_id);
|
||||
} else {
|
||||
// The instruction in the constants store is an abstract symbolic
|
||||
// constant, not associated with any particular generic.
|
||||
auto symbolic_constant =
|
||||
SymbolicConstant{.inst_id = inst_id,
|
||||
.generic_id = GenericId::Invalid,
|
||||
.index = GenericInstIndex::Invalid};
|
||||
SymbolicConstant symbolic_constant = {
|
||||
.inst_id = inst_id,
|
||||
.generic_id = GenericId::Invalid,
|
||||
.index = GenericInstIndex::Invalid,
|
||||
.period_self_only = (phase == IsPeriodSelfSymbolic)};
|
||||
const_id =
|
||||
sem_ir_->constant_values().AddSymbolicConstant(symbolic_constant);
|
||||
} else {
|
||||
const_id = SemIR::ConstantId::ForTemplateConstant(inst_id);
|
||||
}
|
||||
sem_ir_->constant_values().Set(inst_id, const_id);
|
||||
constants_.push_back(inst_id);
|
||||
@@ -30,7 +31,7 @@ auto ConstantStore::GetOrAdd(Inst inst, bool is_symbolic) -> ConstantId {
|
||||
});
|
||||
CARBON_CHECK(result.value() != ConstantId::Invalid);
|
||||
CARBON_CHECK(
|
||||
result.value().is_symbolic() == is_symbolic,
|
||||
result.value().is_symbolic() == (phase != IsTemplate),
|
||||
"Constant {0} registered as both symbolic and template constant.", inst);
|
||||
return result.value();
|
||||
}
|
||||
|
||||
@@ -24,10 +24,13 @@ struct SymbolicConstant : Printable<SymbolicConstant> {
|
||||
// The index of this symbolic constant within the generic's list of symbolic
|
||||
// constants, or invalid if `generic_id` is invalid.
|
||||
GenericInstIndex index;
|
||||
// True if this is constant is symbolic just because it uses `.Self`.
|
||||
bool period_self_only;
|
||||
|
||||
auto Print(llvm::raw_ostream& out) const -> void {
|
||||
out << "{inst: " << inst_id << ", generic: " << generic_id
|
||||
<< ", index: " << index << "}";
|
||||
<< ", index: " << index
|
||||
<< ", .Self: " << (period_self_only ? "true" : "false") << "}";
|
||||
}
|
||||
};
|
||||
|
||||
@@ -102,6 +105,13 @@ class ConstantValueStore {
|
||||
return symbolic_constants_[const_id.symbolic_index()];
|
||||
}
|
||||
|
||||
// Returns true for symbolic constants other than those that are only symbolic
|
||||
// because they depend on `.Self`.
|
||||
auto DependsOnGenericParameter(ConstantId const_id) const -> bool {
|
||||
return const_id.is_symbolic() &&
|
||||
!GetSymbolicConstant(const_id).period_self_only;
|
||||
}
|
||||
|
||||
// Collects memory usage of members.
|
||||
auto CollectMemUsage(MemUsage& mem_usage, llvm::StringRef label) const
|
||||
-> void {
|
||||
@@ -148,9 +158,10 @@ class ConstantStore {
|
||||
// Adds a new constant instruction, or gets the existing constant with this
|
||||
// value. Returns the ID of the constant.
|
||||
//
|
||||
// This updates `sem_ir.insts()` and `sem_ir.constant_values()` if the
|
||||
// This updates `sem_ir->insts()` and `sem_ir->constant_values()` if the
|
||||
// constant is new.
|
||||
auto GetOrAdd(Inst inst, bool is_symbolic) -> ConstantId;
|
||||
enum PhaseKind : uint8_t { IsTemplate, IsPeriodSelfSymbolic, IsSymbolic };
|
||||
auto GetOrAdd(Inst inst, PhaseKind phase) -> ConstantId;
|
||||
|
||||
// Collects memory usage of members.
|
||||
auto CollectMemUsage(MemUsage& mem_usage, llvm::StringRef label) const
|
||||
|
||||
@@ -27,7 +27,9 @@ struct EntityName : public Printable<EntityName> {
|
||||
NameId name_id;
|
||||
// The parent scope.
|
||||
NameScopeId parent_scope_id;
|
||||
// The index for a compile-time binding. Invalid for a runtime binding.
|
||||
// The index for a compile-time binding. Invalid for a runtime binding, or
|
||||
// for a symbolic binding, like `.Self`, that does not correspond to a generic
|
||||
// parameter (and therefore has no index).
|
||||
CompileTimeBindIndex bind_index;
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
||||
// Exceptions. See /LICENSE for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
#include "toolchain/sem_ir/facet_type_info.h"
|
||||
|
||||
namespace Carbon::SemIR {
|
||||
|
||||
template <typename VecT>
|
||||
static auto SortAndDeduplicate(VecT* vec) -> void {
|
||||
std::sort(vec->begin(), vec->end());
|
||||
vec->erase(std::unique(vec->begin(), vec->end()), vec->end());
|
||||
}
|
||||
|
||||
auto FacetTypeInfo::Canonicalize() -> void {
|
||||
SortAndDeduplicate(&impls_constraints);
|
||||
SortAndDeduplicate(&rewrite_constraints);
|
||||
}
|
||||
|
||||
auto FacetTypeInfo::Print(llvm::raw_ostream& out) const -> void {
|
||||
out << "{";
|
||||
llvm::ListSeparator outer_sep("; ");
|
||||
|
||||
if (!impls_constraints.empty()) {
|
||||
out << outer_sep << "impls interface: ";
|
||||
llvm::ListSeparator sep;
|
||||
for (ImplsConstraint req : impls_constraints) {
|
||||
out << sep << req.interface_id;
|
||||
if (req.specific_id.is_valid()) {
|
||||
out << "(" << req.specific_id << ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!rewrite_constraints.empty()) {
|
||||
out << outer_sep << "rewrites: ";
|
||||
llvm::ListSeparator sep;
|
||||
for (RewriteConstraint req : rewrite_constraints) {
|
||||
out << sep << req.lhs_const_id << "=" << req.rhs_const_id;
|
||||
}
|
||||
}
|
||||
|
||||
if (other_requirements) {
|
||||
out << outer_sep << "+ TODO requirements";
|
||||
}
|
||||
out << "}";
|
||||
}
|
||||
|
||||
} // namespace Carbon::SemIR
|
||||
@@ -21,6 +21,13 @@ struct FacetTypeInfo : Printable<FacetTypeInfo> {
|
||||
|
||||
// `ImplsConstraint` holds the interfaces this facet type requires.
|
||||
struct ImplsConstraint {
|
||||
// TODO: extend this so it can represent named constraint requirements
|
||||
// and requirements on members, not just `.Self`.
|
||||
// TODO: Add whether this is a lookup context. Those that are should sort
|
||||
// first for easy access. Right now, all are assumed to be lookup contexts.
|
||||
InterfaceId interface_id;
|
||||
SpecificId specific_id;
|
||||
|
||||
auto operator==(const ImplsConstraint& rhs) const -> bool {
|
||||
return interface_id == rhs.interface_id && specific_id == rhs.specific_id;
|
||||
}
|
||||
@@ -29,38 +36,42 @@ struct FacetTypeInfo : Printable<FacetTypeInfo> {
|
||||
return std::tie(interface_id.index, specific_id.index) <=>
|
||||
std::tie(rhs.interface_id.index, rhs.specific_id.index);
|
||||
}
|
||||
|
||||
// TODO: extend this so it can represent named constraint requirements
|
||||
// and requirements on members, not just `.Self`.
|
||||
// TODO: Add whether this is a lookup context. Those that are should sort
|
||||
// first for easy access. Right now, all are assumed to be lookup contexts.
|
||||
InterfaceId interface_id;
|
||||
SpecificId specific_id;
|
||||
};
|
||||
llvm::SmallVector<ImplsConstraint> impls_constraints;
|
||||
// TODO: Add rewrite constraints.
|
||||
|
||||
// Rewrite constraints of the form `.T = U`
|
||||
struct RewriteConstraint {
|
||||
ConstantId lhs_const_id;
|
||||
ConstantId rhs_const_id;
|
||||
|
||||
auto operator==(const RewriteConstraint& rhs) const -> bool {
|
||||
return lhs_const_id == rhs.lhs_const_id &&
|
||||
rhs_const_id == rhs.rhs_const_id;
|
||||
}
|
||||
// Canonically ordered by the numerical ids.
|
||||
auto operator<=>(const RewriteConstraint& rhs) const
|
||||
-> std::strong_ordering {
|
||||
return std::tie(lhs_const_id.index, rhs_const_id.index) <=>
|
||||
std::tie(rhs.lhs_const_id.index, rhs.rhs_const_id.index);
|
||||
}
|
||||
};
|
||||
llvm::SmallVector<RewriteConstraint> rewrite_constraints;
|
||||
|
||||
// TODO: Add same-type constraints.
|
||||
// TODO: Remove `requirement_block_id`.
|
||||
InstBlockId requirement_block_id;
|
||||
// TODO: Remove once all requirements are supported.
|
||||
bool other_requirements;
|
||||
// TODO: Add optional resolved facet type.
|
||||
|
||||
auto Print(llvm::raw_ostream& out) const -> void {
|
||||
out << "{impls interface: ";
|
||||
llvm::ListSeparator sep;
|
||||
for (ImplsConstraint req : impls_constraints) {
|
||||
out << sep << req.interface_id;
|
||||
if (req.specific_id.is_valid()) {
|
||||
out << "(" << req.specific_id << ")";
|
||||
}
|
||||
}
|
||||
out << "; requirements: " << requirement_block_id << "}";
|
||||
}
|
||||
// Sorts and deduplicates constraints.
|
||||
auto Canonicalize() -> void;
|
||||
|
||||
auto Print(llvm::raw_ostream& out) const -> void;
|
||||
|
||||
// TODO: Update callers to be able to deal with facet types that aren't a
|
||||
// single interface and then remove this function.
|
||||
auto TryAsSingleInterface() const -> std::optional<ImplsConstraint> {
|
||||
// We are ignoring requirement_block_id for the moment since nothing uses it
|
||||
// yet.
|
||||
// We are ignoring other requirements for the moment, since this function is
|
||||
// (hopefully) temporary.
|
||||
if (impls_constraints.size() == 1) {
|
||||
return impls_constraints.front();
|
||||
}
|
||||
@@ -69,7 +80,8 @@ struct FacetTypeInfo : Printable<FacetTypeInfo> {
|
||||
|
||||
auto operator==(const FacetTypeInfo& rhs) const -> bool {
|
||||
return impls_constraints == rhs.impls_constraints &&
|
||||
requirement_block_id == rhs.requirement_block_id;
|
||||
rewrite_constraints == rhs.rewrite_constraints &&
|
||||
other_requirements == rhs.other_requirements;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -78,7 +90,8 @@ inline auto CarbonHashValue(const FacetTypeInfo& value, uint64_t seed)
|
||||
-> HashCode {
|
||||
Hasher hasher(seed);
|
||||
hasher.HashSizedBytes(llvm::ArrayRef(value.impls_constraints));
|
||||
hasher.HashRaw(value.requirement_block_id);
|
||||
hasher.HashSizedBytes(llvm::ArrayRef(value.rewrite_constraints));
|
||||
hasher.HashRaw(value.other_requirements);
|
||||
return static_cast<HashCode>(hasher);
|
||||
}
|
||||
|
||||
|
||||
@@ -1055,9 +1055,19 @@ class FormatterImpl {
|
||||
}
|
||||
}
|
||||
|
||||
if (info.requirement_block_id.is_valid()) {
|
||||
if (info.other_requirements || !info.rewrite_constraints.empty()) {
|
||||
// TODO: Include specifics.
|
||||
out_ << " where TODO";
|
||||
out_ << " where ";
|
||||
llvm::ListSeparator and_sep(" and ");
|
||||
for (auto rewrite : info.rewrite_constraints) {
|
||||
out_ << and_sep;
|
||||
FormatConstant(rewrite.lhs_const_id);
|
||||
out_ << " = ";
|
||||
FormatConstant(rewrite.rhs_const_id);
|
||||
}
|
||||
if (info.other_requirements) {
|
||||
out_ << and_sep << "TODO";
|
||||
}
|
||||
}
|
||||
out_ << ">";
|
||||
}
|
||||
|
||||
@@ -552,16 +552,15 @@ auto InstNamer::CollectNamesInBlock(ScopeId scope_id,
|
||||
case CARBON_KIND(FacetType inst): {
|
||||
const auto& facet_type_info =
|
||||
sem_ir_.facet_types().Get(inst.facet_type_id);
|
||||
bool has_where = facet_type_info.other_requirements ||
|
||||
!facet_type_info.rewrite_constraints.empty();
|
||||
if (auto interface = facet_type_info.TryAsSingleInterface()) {
|
||||
const auto& interface_info =
|
||||
sem_ir_.interfaces().Get(interface->interface_id);
|
||||
add_inst_name_id(interface_info.name_id, ".type");
|
||||
add_inst_name_id(interface_info.name_id,
|
||||
has_where ? "_where.type" : ".type");
|
||||
} else if (facet_type_info.impls_constraints.empty()) {
|
||||
if (facet_type_info.requirement_block_id.is_valid()) {
|
||||
add_inst_name("type_where");
|
||||
} else {
|
||||
add_inst_name("type");
|
||||
}
|
||||
add_inst_name(has_where ? "type_where" : "type");
|
||||
} else {
|
||||
add_inst_name("facet_type");
|
||||
}
|
||||
|
||||
@@ -212,11 +212,31 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id)
|
||||
case CARBON_KIND(FacetType inst): {
|
||||
const FacetTypeInfo& facet_type_info =
|
||||
sem_ir.facet_types().Get(inst.facet_type_id);
|
||||
// TODO: Also output other restrictions from facet_type_info.
|
||||
if (facet_type_info.requirement_block_id.is_valid()) {
|
||||
step_stack.PushString(" where...");
|
||||
// Output `where` restrictions.
|
||||
bool some_where = false;
|
||||
if (facet_type_info.other_requirements) {
|
||||
step_stack.PushString("...");
|
||||
some_where = true;
|
||||
}
|
||||
for (auto rewrite :
|
||||
llvm::reverse(facet_type_info.rewrite_constraints)) {
|
||||
if (some_where) {
|
||||
step_stack.PushString(" and");
|
||||
}
|
||||
step_stack.PushInstId(
|
||||
sem_ir.constant_values().GetInstId(rewrite.rhs_const_id));
|
||||
step_stack.PushString(" = ");
|
||||
step_stack.PushInstId(
|
||||
sem_ir.constant_values().GetInstId(rewrite.lhs_const_id));
|
||||
step_stack.PushString(" ");
|
||||
some_where = true;
|
||||
}
|
||||
// TODO: Other restrictions from facet_type_info.
|
||||
if (some_where) {
|
||||
step_stack.PushString(" where");
|
||||
}
|
||||
|
||||
// Output interface requirements.
|
||||
if (facet_type_info.impls_constraints.empty()) {
|
||||
step_stack.PushString("type");
|
||||
break;
|
||||
@@ -271,6 +291,15 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id)
|
||||
<< ">";
|
||||
break;
|
||||
}
|
||||
case CARBON_KIND(ImportRefUnloaded inst): {
|
||||
if (inst.entity_name_id.is_valid()) {
|
||||
auto name_id = sem_ir.entity_names().Get(inst.entity_name_id).name_id;
|
||||
out << sem_ir.names().GetFormatted(name_id);
|
||||
} else {
|
||||
out << "<import ref unloaded invalid entity name>";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CARBON_KIND(IntType inst): {
|
||||
if (auto width_value =
|
||||
sem_ir.insts().TryGetAs<IntValue>(inst.bit_width_id)) {
|
||||
@@ -283,6 +312,58 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CARBON_KIND(InterfaceWitnessAccess inst): {
|
||||
auto witness_inst_id =
|
||||
sem_ir.constant_values().GetConstantInstId(inst.witness_id);
|
||||
auto witness =
|
||||
sem_ir.insts().GetAs<FacetAccessWitness>(witness_inst_id);
|
||||
auto witness_type_id =
|
||||
sem_ir.insts().Get(witness.facet_value_inst_id).type_id();
|
||||
auto facet_type = sem_ir.types().GetAs<FacetType>(witness_type_id);
|
||||
step_stack.PushString(")");
|
||||
// TODO: Support != 1 interface better.
|
||||
if (auto impls_constraint = sem_ir.facet_types()
|
||||
.Get(facet_type.facet_type_id)
|
||||
.TryAsSingleInterface()) {
|
||||
const auto& interface =
|
||||
sem_ir.interfaces().Get(impls_constraint->interface_id);
|
||||
auto entities =
|
||||
sem_ir.inst_blocks().Get(interface.associated_entities_id);
|
||||
size_t index = inst.index.index;
|
||||
CARBON_CHECK(index < entities.size(), "Access out of bounds.");
|
||||
auto entity_inst_id = entities[index];
|
||||
if (auto associated_const =
|
||||
sem_ir.insts().TryGetAs<AssociatedConstantDecl>(
|
||||
entity_inst_id)) {
|
||||
step_stack.PushNameId(associated_const->name_id);
|
||||
} else if (auto function_decl = sem_ir.insts().TryGetAs<FunctionDecl>(
|
||||
entity_inst_id)) {
|
||||
const auto& function =
|
||||
sem_ir.functions().Get(function_decl->function_id);
|
||||
step_stack.PushNameId(function.name_id);
|
||||
} else {
|
||||
step_stack.PushInstId(entity_inst_id);
|
||||
}
|
||||
step_stack.PushString(".");
|
||||
step_stack.PushNameId(interface.name_id);
|
||||
step_stack.PushString(".(");
|
||||
} else {
|
||||
step_stack.PushTypeId(witness_type_id);
|
||||
step_stack.PushString(".(TODO: ");
|
||||
}
|
||||
|
||||
bool period_self = false;
|
||||
if (auto sym_name = sem_ir.insts().TryGetAs<BindSymbolicName>(
|
||||
witness.facet_value_inst_id)) {
|
||||
auto name_id =
|
||||
sem_ir.entity_names().Get(sym_name->entity_name_id).name_id;
|
||||
period_self = (name_id == SemIR::NameId::PeriodSelf);
|
||||
}
|
||||
if (!period_self) {
|
||||
step_stack.PushInstId(witness.facet_value_inst_id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CARBON_KIND(IntValue inst): {
|
||||
sem_ir.ints().Get(inst.int_id).print(out, /*isSigned=*/true);
|
||||
break;
|
||||
@@ -343,15 +424,6 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id)
|
||||
step_stack.PushTypeId(inst.class_type_id);
|
||||
break;
|
||||
}
|
||||
case CARBON_KIND(WhereExpr inst): {
|
||||
out << "<where restriction on ";
|
||||
step_stack.PushString(">");
|
||||
TypeId type_id = sem_ir.insts().Get(inst.period_self_id).type_id();
|
||||
step_stack.PushTypeId(type_id);
|
||||
// TODO: Also output restrictions from the inst block
|
||||
// inst.requirements_id.
|
||||
break;
|
||||
}
|
||||
case AdaptDecl::Kind:
|
||||
case AddrOf::Kind:
|
||||
case AddrPattern::Kind:
|
||||
@@ -384,11 +456,9 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id)
|
||||
case ImplDecl::Kind:
|
||||
case ImportDecl::Kind:
|
||||
case ImportRefLoaded::Kind:
|
||||
case ImportRefUnloaded::Kind:
|
||||
case InitializeFrom::Kind:
|
||||
case InterfaceDecl::Kind:
|
||||
case InterfaceWitness::Kind:
|
||||
case InterfaceWitnessAccess::Kind:
|
||||
case Namespace::Kind:
|
||||
case OutParam::Kind:
|
||||
case OutParamPattern::Kind:
|
||||
@@ -420,6 +490,7 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id)
|
||||
case ValueParam::Kind:
|
||||
case ValueParamPattern::Kind:
|
||||
case VarStorage::Kind:
|
||||
case WhereExpr::Kind:
|
||||
// We don't know how to print this instruction, but it might have a
|
||||
// constant value that we can print.
|
||||
auto const_inst_id =
|
||||
|
||||
Reference in New Issue
Block a user