mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-04 22:02:52 +01:00
Export abstract methods as pure virtual (#7578)
`abstract fn` was exported to C++ as a plain virtual function rather than a pure virtual one, so the class wasn't abstract and could be instantiated from C++. Abstract functions no longer get a thunk since there is no definition to call. The tests are prefixed with `fail_` since an abstract class still errors on `Core.Destroy` regardless.
This commit is contained in:
@@ -825,7 +825,10 @@ static auto BuildCppToCarbonThunkDecl(Context& context, SemIR::LocId loc_id,
|
||||
SemIR::Function::VirtualModifier::None &&
|
||||
target.function.virtual_modifier !=
|
||||
SemIR::Function::VirtualModifier::Override);
|
||||
// TODO: Call setIsPureVirtual if VirtualModifier::Abstract is present.
|
||||
if (target.function.virtual_modifier ==
|
||||
SemIR::Function::VirtualModifier::Abstract) {
|
||||
cast<clang::CXXMethodDecl>(thunk_function_decl)->setIsPureVirtual(true);
|
||||
}
|
||||
} else {
|
||||
thunk_function_decl = clang::FunctionDecl::Create(
|
||||
ast_context, target.decl_context, clang_loc, name_info, thunk_qual_type,
|
||||
|
||||
Reference in New Issue
Block a user