Commit 82ea8185 by Eric Botcazou Committed by Eric Botcazou

decl.c (variant_desc): Rename 'record' to 'new_type'.

	* gcc-interface/decl.c (variant_desc): Rename 'record' to 'new_type'.
	(build_variant_list): Adjust to above renaming.
	(gnat_to_gnu_entity) <E_Record_Subtype>: Likewise.  Give a unique name
	to the type of the variant containers.
	(create_variant_part_from): Likewise.  Give a unique name to the type
	of the variant part.

From-SVN: r187908
parent 083aa744
2012-05-26 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (variant_desc): Rename 'record' to 'new_type'.
(build_variant_list): Adjust to above renaming.
(gnat_to_gnu_entity) <E_Record_Subtype>: Likewise. Give a unique name
to the type of the variant containers.
(create_variant_part_from): Likewise. Give a unique name to the type
of the variant part.
2012-05-25 Eric Botcazou <ebotcazou@adacore.com> 2012-05-25 Eric Botcazou <ebotcazou@adacore.com>
PR ada/52362 PR ada/52362
......
...@@ -119,8 +119,8 @@ typedef struct variant_desc_d { ...@@ -119,8 +119,8 @@ typedef struct variant_desc_d {
/* The value of the qualifier. */ /* The value of the qualifier. */
tree qual; tree qual;
/* The record associated with this variant. */ /* The type of the variant after transformation. */
tree record; tree new_type;
} variant_desc; } variant_desc;
DEF_VEC_O(variant_desc); DEF_VEC_O(variant_desc);
...@@ -3318,11 +3318,16 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ...@@ -3318,11 +3318,16 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
{ {
tree old_variant = v->type; tree old_variant = v->type;
tree new_variant = make_node (RECORD_TYPE); tree new_variant = make_node (RECORD_TYPE);
tree suffix
= concat_name (DECL_NAME (gnu_variant_part),
IDENTIFIER_POINTER
(DECL_NAME (v->field)));
TYPE_NAME (new_variant) TYPE_NAME (new_variant)
= DECL_NAME (TYPE_NAME (old_variant)); = concat_name (TYPE_NAME (gnu_type),
IDENTIFIER_POINTER (suffix));
copy_and_substitute_in_size (new_variant, old_variant, copy_and_substitute_in_size (new_variant, old_variant,
gnu_subst_list); gnu_subst_list);
v->record = new_variant; v->new_type = new_variant;
} }
} }
else else
...@@ -3426,7 +3431,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ...@@ -3426,7 +3431,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
if (selected_variant) if (selected_variant)
gnu_cont_type = gnu_type; gnu_cont_type = gnu_type;
else else
gnu_cont_type = v->record; gnu_cont_type = v->new_type;
} }
else else
/* The front-end may pass us "ghost" components if /* The front-end may pass us "ghost" components if
...@@ -7562,7 +7567,7 @@ build_variant_list (tree qual_union_type, VEC(subst_pair,heap) *subst_list, ...@@ -7562,7 +7567,7 @@ build_variant_list (tree qual_union_type, VEC(subst_pair,heap) *subst_list,
v->type = variant_type; v->type = variant_type;
v->field = gnu_field; v->field = gnu_field;
v->qual = qual; v->qual = qual;
v->record = NULL_TREE; v->new_type = NULL_TREE;
/* Recurse on the variant subpart of the variant, if any. */ /* Recurse on the variant subpart of the variant, if any. */
variant_subpart = get_variant_part (variant_type); variant_subpart = get_variant_part (variant_type);
...@@ -8238,7 +8243,9 @@ create_variant_part_from (tree old_variant_part, ...@@ -8238,7 +8243,9 @@ create_variant_part_from (tree old_variant_part,
/* First create the type of the variant part from that of the old one. */ /* First create the type of the variant part from that of the old one. */
new_union_type = make_node (QUAL_UNION_TYPE); new_union_type = make_node (QUAL_UNION_TYPE);
TYPE_NAME (new_union_type) = DECL_NAME (TYPE_NAME (old_union_type)); TYPE_NAME (new_union_type)
= concat_name (TYPE_NAME (record_type),
IDENTIFIER_POINTER (DECL_NAME (old_variant_part)));
/* If the position of the variant part is constant, subtract it from the /* If the position of the variant part is constant, subtract it from the
size of the type of the parent to get the new size. This manual CSE size of the type of the parent to get the new size. This manual CSE
...@@ -8272,7 +8279,7 @@ create_variant_part_from (tree old_variant_part, ...@@ -8272,7 +8279,7 @@ create_variant_part_from (tree old_variant_part,
continue; continue;
/* Retrieve the list of fields already added to the new variant. */ /* Retrieve the list of fields already added to the new variant. */
new_variant = v->record; new_variant = v->new_type;
field_list = TYPE_FIELDS (new_variant); field_list = TYPE_FIELDS (new_variant);
/* If the old variant had a variant subpart, we need to create a new /* If the old variant had a variant subpart, we need to create a new
......
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