This is a regression present on all active branches: -fdump-ada-spec no longer
generates a declaration for the (implicit) deleting destructor in a class,
which is problematic if it's virtual because it has a slot in the vtable.
Tested on x86_64-suse-linux, applied on all active branches.
2019-04-09 Eric Botcazou <ebotca...@adacore.com>
c-family/
* c-ada-spec.c (print_destructor): Deal with deleting destructors.
(dump_ada_declaration) <FUNCTION_DECL>: Likewise.
--
Eric Botcazou
Index: c-ada-spec.c
===================================================================
--- c-ada-spec.c (revision 270188)
+++ c-ada-spec.c (working copy)
@@ -2676,6 +2676,8 @@ print_destructor (pretty_printer *buffer
tree decl_name = DECL_NAME (TYPE_NAME (type));
pp_string (buffer, "Delete_");
+ if (strncmp (IDENTIFIER_POINTER (DECL_NAME (t)), "__dt_del", 8) == 0)
+ pp_string (buffer, "And_Free_");
pp_ada_tree_identifier (buffer, decl_name, t, false);
}
@@ -2946,9 +2948,10 @@ dump_ada_declaration (pretty_printer *bu
if (DECL_ARTIFICIAL (t))
return 0;
- /* Only consider constructors/destructors for complete objects. */
+ /* Only consider complete constructors and deleting destructors. */
if (strncmp (IDENTIFIER_POINTER (decl_name), "__ct_comp", 9) != 0
- && strncmp (IDENTIFIER_POINTER (decl_name), "__dt_comp", 9) != 0)
+ && strncmp (IDENTIFIER_POINTER (decl_name), "__dt_comp", 9) != 0
+ && strncmp (IDENTIFIER_POINTER (decl_name), "__dt_del", 8) != 0)
return 0;
}