Support for initialization of classes with abstract base classes. (#6802)

When initializing `.base` in class initialization, use `partial Base` as
the destination type rather than `Base`. Treat `partial Base` as not
being abstract even when `Base` is.

Allow conversion from a `partial T` initializer to a `T` initializer.
Store the vptr while performing the conversion. Do not store the vptr
when performing a `partial T` initialization, only when performing a
non-partial `T` initialization.
This commit is contained in:
Richard Smith
2026-02-27 01:27:25 +00:00
committed by GitHub
parent be88dfd744
commit 41dd256d56
22 changed files with 717 additions and 233 deletions
+7
View File
@@ -773,6 +773,13 @@ auto EvalConstantInst(Context& context, SemIR::UnaryOperatorNot inst)
return ConstantEvalResult::NotConstant;
}
auto EvalConstantInst(Context& /*context*/, SemIR::UpdateInit /*inst*/)
-> ConstantEvalResult {
// TODO: Support folding together a ClassInit with an update that sets the
// vptr.
return ConstantEvalResult::TODO;
}
auto EvalConstantInst(Context& context, SemIR::ValueOfInitializer inst)
-> ConstantEvalResult {
// Values of value expressions and initializing expressions are represented in