decl.c (gnat_to_gnu_entity): Put the _Tag field before any discriminants in the field list.

* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Subtype>: Put
	the _Tag field before any discriminants in the field list.
	(components_to_record): Remove obsolete comment.

From-SVN: r143267
This commit is contained in:
Eric Botcazou 2009-01-11 12:24:02 +00:00 committed by Eric Botcazou
parent 53a7ff9a9a
commit 13318d2fc8
2 changed files with 19 additions and 4 deletions

View file

@ -1,3 +1,9 @@
2009-01-11 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Subtype>: Put
the _Tag field before any discriminants in the field list.
(components_to_record): Remove obsolete comment.
2008-12-09 Jakub Jelinek <jakub@redhat.com>
PR ada/38450

View file

@ -3139,8 +3139,18 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
= DECL_DISCRIMINANT_NUMBER (gnu_old_field);
TREE_THIS_VOLATILE (gnu_field)
= TREE_THIS_VOLATILE (gnu_old_field);
TREE_CHAIN (gnu_field) = gnu_field_list;
gnu_field_list = gnu_field;
/* To match the layout crafted in components_to_record, if
this is the _Tag field, put it before any discriminants
instead of after them as for all other fields. */
if (Chars (gnat_field) == Name_uTag)
gnu_field_list = chainon (gnu_field_list, gnu_field);
else
{
TREE_CHAIN (gnu_field) = gnu_field_list;
gnu_field_list = gnu_field;
}
save_gnu_tree (gnat_field, gnu_field, false);
}
@ -6436,8 +6446,7 @@ components_to_record (tree gnu_record_type, Node_Id component_list,
packed, definition);
/* If this is the _Tag field, put it before any discriminants,
instead of after them as is the case for all other fields.
Ignore field of void type if only annotating. */
instead of after them as is the case for all other fields. */
if (Chars (gnat_field) == Name_uTag)
gnu_field_list = chainon (gnu_field_list, gnu_field);
else