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> 2008-12-09 Jakub Jelinek <jakub@redhat.com>
PR ada/38450 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); = DECL_DISCRIMINANT_NUMBER (gnu_old_field);
TREE_THIS_VOLATILE (gnu_field) TREE_THIS_VOLATILE (gnu_field)
= TREE_THIS_VOLATILE (gnu_old_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); 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); packed, definition);
/* If this is the _Tag field, put it before any discriminants, /* If this is the _Tag field, put it before any discriminants,
instead of after them as is the case for all other fields. instead of after them as is the case for all other fields. */
Ignore field of void type if only annotating. */
if (Chars (gnat_field) == Name_uTag) if (Chars (gnat_field) == Name_uTag)
gnu_field_list = chainon (gnu_field_list, gnu_field); gnu_field_list = chainon (gnu_field_list, gnu_field);
else else