Improve support of simple bit-fields in -fdump-ada-spec

This fixes an issue with nested structures and adds an Alignment clause
to counter the effect of the Pack aspect.

gcc/c-family/ChangeLog:
	* c-ada-spec.c (dump_nested_type) <RECORD_TYPE>: Remove obsolete code.
	(dump_ada_structure): Also deal with convention, unchecked union and
	bit-field for nested types.  In the latter case, print an Alignment
	aspect along with the Pack aspect.
This commit is contained in:
Eric Botcazou 2020-11-28 16:37:12 +01:00
parent b1adbc27c4
commit 8e59ff5541

View File

@ -2598,16 +2598,6 @@ dump_nested_type (pretty_printer *buffer, tree field, tree t, tree parent,
pp_string (buffer, " is ");
dump_ada_structure (buffer, field_type, t, true, spc);
pp_string (buffer, "with Convention => C_Pass_By_Copy");
if (TREE_CODE (field_type) == UNION_TYPE)
{
pp_comma (buffer);
newline_and_indent (buffer, spc + 5);
pp_string (buffer, "Unchecked_Union => True");
}
pp_semicolon (buffer);
newline_and_indent (buffer, spc);
break;
@ -3318,10 +3308,7 @@ dump_ada_structure (pretty_printer *buffer, tree node, tree type, bool nested,
newline_and_indent (buffer, spc);
/* We disregard the methods for anonymous nested types. */
if (nested)
return;
if (has_nontrivial_methods (node))
if (has_nontrivial_methods (node) && !nested)
{
pp_string (buffer, "with Import => True,");
newline_and_indent (buffer, spc + 5);
@ -3339,12 +3326,20 @@ dump_ada_structure (pretty_printer *buffer, tree node, tree type, bool nested,
if (bitfield_used)
{
char buf[32];
pp_comma (buffer);
newline_and_indent (buffer, spc + 5);
pp_string (buffer, "Pack => True");
pp_comma (buffer);
newline_and_indent (buffer, spc + 5);
sprintf (buf, "Alignment => %d", TYPE_ALIGN (node) / BITS_PER_UNIT);
pp_string (buffer, buf);
bitfield_used = false;
}
if (nested)
return;
need_semicolon = !dump_ada_methods (buffer, node, spc);
/* Print the static fields of the structure, if any. */