Track complete types required by a generic. (#4652)

When a generic requires a symbolic type to be complete, add a new
`require_complete_type` instruction to the generic eval block. During
monomorphization of such an instruction, require that type to be
complete.
This commit is contained in:
Richard Smith
2024-12-10 03:00:28 +00:00
committed by GitHub
parent e75ef34591
commit eabe9f117a
107 changed files with 1357 additions and 291 deletions
+9 -7
View File
@@ -143,13 +143,15 @@ static auto BuildInterfaceWitness(
// TODO: This is going to try and define all the interfaces for this facet
// type, and so once we support impl of a facet type with more than one
// interface, it might give the wrong name in the diagnostic.
if (!context.TryToDefineType(facet_type_id, [&] {
CARBON_DIAGNOSTIC(ImplOfUndefinedInterface, Error,
"implementation of undefined interface {0}",
SemIR::NameId);
return context.emitter().Build(
impl.definition_id, ImplOfUndefinedInterface, interface.name_id);
})) {
if (!context.TryToDefineType(
facet_type_id, context.insts().GetLocId(impl.definition_id), [&] {
CARBON_DIAGNOSTIC(ImplOfUndefinedInterface, Error,
"implementation of undefined interface {0}",
SemIR::NameId);
return context.emitter().Build(impl.definition_id,
ImplOfUndefinedInterface,
interface.name_id);
})) {
return SemIR::ErrorInst::SingletonInstId;
}