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:
parent
b1adbc27c4
commit
8e59ff5541
@ -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. */
|
||||
|
Loading…
Reference in New Issue
Block a user