diff options
author | Dr. Chat <arkolbed@gmail.com> | 2021-12-30 11:28:06 -0600 |
---|---|---|
committer | Emilio Cobos Álvarez <emilio@crisal.io> | 2022-01-29 11:29:00 +0100 |
commit | 0587ff95a9a411c7392ff2aa1775f69ac36caff5 (patch) | |
tree | 3c18a3a6adb3d7bbd3cb5af26e746a82bce72369 /src/codegen/mod.rs | |
parent | f578b0b4505a46bbf7724eeaa48ea93f1a2aacea (diff) |
On second thought, don't generate virtual destructors
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r-- | src/codegen/mod.rs | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 7a46f885..b7cee7ec 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -1041,19 +1041,19 @@ impl<'a> CodeGenerator for Vtable<'a> { assert_eq!(item.id(), self.item_id); debug_assert!(item.is_enabled_for_codegen(ctx)); let name = ctx.rust_ident(&self.canonical_name(ctx)); - let class_ident = ctx.rust_ident(self.item_id.canonical_name(ctx)); - // For now, we will only generate vtables for classes that do not inherit from others. - if self.comp_info.base_members().is_empty() { - // Map the destructor into a Method, and chain it into the below iteration. - let dtor = self - .comp_info - .destructor() - .map(|(kind, id)| Method::new(kind, id, false)); + // For now, we will only generate vtables for classes that: + // - do not inherit from others (compilers merge VTable from primary parent class). + // - do not contain a virtual destructor (requires ordering; platforms generate different vtables). + if self.comp_info.base_members().is_empty() && + self.comp_info.destructor().is_none() + { + let class_ident = ctx.rust_ident(self.item_id.canonical_name(ctx)); - let methods = dtor + let methods = self + .comp_info + .methods() .iter() - .chain(self.comp_info.methods().iter()) .filter_map(|m| { if !m.is_virtual() { return None; |