Commit 13318d2f by Eric Botcazou Committed by Eric Botcazou

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
parent 53a7ff9a
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
...@@ -3139,8 +3139,18 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ...@@ -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, ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment