@@ -2111,7 +2111,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
tree *gnu_index_types = XALLOCAVEC (tree, ndim);
tree *gnu_temp_fields = XALLOCAVEC (tree, ndim);
tree gnu_max_size = size_one_node;
- tree comp_type, tem, obj;
+ tree comp_type, fld, tem, obj;
Entity_Id gnat_index;
alias_set_type ptr_set = -1;
int index;
@@ -2184,11 +2184,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
if the FIELD_DECLs are distinct as objects. */
if (COMPLETE_TYPE_P (gnu_fat_type))
{
- tem = TYPE_FIELDS (gnu_fat_type);
- if (TYPE_ALIAS_SET_KNOWN_P (TREE_TYPE (tem)))
- ptr_set = TYPE_ALIAS_SET (TREE_TYPE (tem));
- TREE_TYPE (tem) = ptr_type_node;
- TREE_TYPE (DECL_CHAIN (tem)) = gnu_ptr_template;
+ fld = TYPE_FIELDS (gnu_fat_type);
+ if (TYPE_ALIAS_SET_KNOWN_P (TREE_TYPE (fld)))
+ ptr_set = TYPE_ALIAS_SET (TREE_TYPE (fld));
+ TREE_TYPE (fld) = ptr_type_node;
+ TREE_TYPE (DECL_CHAIN (fld)) = gnu_ptr_template;
TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (gnu_fat_type)) = 0;
for (tree t = gnu_fat_type; t; t = TYPE_NEXT_VARIANT (t))
SET_TYPE_UNCONSTRAINED_ARRAY (t, gnu_type);
@@ -2197,15 +2197,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
{
/* We make the fields addressable for the sake of compatibility
with languages for which the regular fields are addressable. */
- tem
+ fld
= create_field_decl (get_identifier ("P_ARRAY"),
ptr_type_node, gnu_fat_type,
NULL_TREE, NULL_TREE, 0, 1);
- DECL_CHAIN (tem)
+ DECL_CHAIN (fld)
= create_field_decl (get_identifier ("P_BOUNDS"),
gnu_ptr_template, gnu_fat_type,
NULL_TREE, NULL_TREE, 0, 1);
- finish_fat_pointer_type (gnu_fat_type, tem);
+ finish_fat_pointer_type (gnu_fat_type, fld);
SET_TYPE_UNCONSTRAINED_ARRAY (gnu_fat_type, gnu_type);
}
@@ -2230,7 +2230,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
fields once we build them. */
tem = build3 (COMPONENT_REF, gnu_ptr_template,
build0 (PLACEHOLDER_EXPR, gnu_fat_type),
- DECL_CHAIN (TYPE_FIELDS (gnu_fat_type)), NULL_TREE);
+ DECL_CHAIN (fld), NULL_TREE);
gnu_template_reference
= build_unary_op (INDIRECT_REF, gnu_template_type, tem);
TREE_READONLY (gnu_template_reference) = 1;
@@ -2413,12 +2413,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
type since the implementation type may vary between constrained
subtypes and unconstrained base type. */
if (Present (PAT))
- TREE_TYPE (TYPE_FIELDS (gnu_fat_type))
- = build_pointer_type_for_mode (tem, ptr_mode, true);
+ TREE_TYPE (fld) = build_pointer_type_for_mode (tem, ptr_mode, true);
else
- TREE_TYPE (TYPE_FIELDS (gnu_fat_type)) = build_pointer_type (tem);
+ TREE_TYPE (fld) = build_pointer_type (tem);
if (ptr_set != -1)
- TYPE_ALIAS_SET (TREE_TYPE (TYPE_FIELDS (gnu_fat_type))) = ptr_set;
+ TYPE_ALIAS_SET (TREE_TYPE (fld)) = ptr_set;
/* If the maximum size doesn't overflow, use it. */
if (gnu_max_size
@@ -158,14 +158,14 @@ enum alias_set_op
ALIAS_SET_SUPERSET
};
-/* Relate the alias sets of GNU_NEW_TYPE and GNU_OLD_TYPE according to OP.
+/* Relate the alias sets of NEW_TYPE and OLD_TYPE according to OP.
If this is a multi-dimensional array type, do this recursively.
OP may be
- ALIAS_SET_COPY: the new set is made a copy of the old one.
- ALIAS_SET_SUPERSET: the new set is made a superset of the old one.
- ALIAS_SET_SUBSET: the new set is made a subset of the old one. */
-extern void relate_alias_sets (tree gnu_new_type, tree gnu_old_type,
+extern void relate_alias_sets (tree new_type, tree old_type,
enum alias_set_op op);
/* Given GNAT_ENTITY, an object (constant, variable, parameter, exception)
@@ -1823,7 +1823,7 @@ set_reverse_storage_order_on_pad_type (tree type)
return canonicalize_pad_type (type);
}
-/* Relate the alias sets of GNU_NEW_TYPE and GNU_OLD_TYPE according to OP.
+/* Relate the alias sets of NEW_TYPE and OLD_TYPE according to OP.
If this is a multi-dimensional array type, do this recursively.
OP may be
@@ -1832,30 +1832,28 @@ set_reverse_storage_order_on_pad_type (tree type)
- ALIAS_SET_SUBSET: the new set is made a subset of the old one. */
void
-relate_alias_sets (tree gnu_new_type, tree gnu_old_type, enum alias_set_op op)
+relate_alias_sets (tree new_type, tree old_type, enum alias_set_op op)
{
/* Remove any padding from GNU_OLD_TYPE. It doesn't matter in the case
of a one-dimensional array, since the padding has the same alias set
as the field type, but if it's a multi-dimensional array, we need to
see the inner types. */
- while (TREE_CODE (gnu_old_type) == RECORD_TYPE
- && (TYPE_JUSTIFIED_MODULAR_P (gnu_old_type)
- || TYPE_PADDING_P (gnu_old_type)))
- gnu_old_type = TREE_TYPE (TYPE_FIELDS (gnu_old_type));
+ while (TREE_CODE (old_type) == RECORD_TYPE
+ && (TYPE_JUSTIFIED_MODULAR_P (old_type)
+ || TYPE_PADDING_P (old_type)))
+ old_type = TREE_TYPE (TYPE_FIELDS (old_type));
/* Unconstrained array types are deemed incomplete and would thus be given
alias set 0. Retrieve the underlying array type. */
- if (TREE_CODE (gnu_old_type) == UNCONSTRAINED_ARRAY_TYPE)
- gnu_old_type
- = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_old_type))));
- if (TREE_CODE (gnu_new_type) == UNCONSTRAINED_ARRAY_TYPE)
- gnu_new_type
- = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_new_type))));
-
- if (TREE_CODE (gnu_new_type) == ARRAY_TYPE
- && TREE_CODE (TREE_TYPE (gnu_new_type)) == ARRAY_TYPE
- && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_new_type)))
- relate_alias_sets (TREE_TYPE (gnu_new_type), TREE_TYPE (gnu_old_type), op);
+ if (TREE_CODE (old_type) == UNCONSTRAINED_ARRAY_TYPE)
+ old_type = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (old_type))));
+ if (TREE_CODE (new_type) == UNCONSTRAINED_ARRAY_TYPE)
+ new_type = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (new_type))));
+
+ if (TREE_CODE (new_type) == ARRAY_TYPE
+ && TREE_CODE (TREE_TYPE (new_type)) == ARRAY_TYPE
+ && TYPE_MULTI_ARRAY_P (TREE_TYPE (new_type)))
+ relate_alias_sets (TREE_TYPE (new_type), TREE_TYPE (old_type), op);
switch (op)
{
@@ -1864,19 +1862,19 @@ relate_alias_sets (tree gnu_new_type, tree gnu_old_type, enum alias_set_op op)
aliasing settings because this can break the aliasing relationship
between the array type and its element type. */
if (flag_checking || flag_strict_aliasing)
- gcc_assert (!(TREE_CODE (gnu_new_type) == ARRAY_TYPE
- && TREE_CODE (gnu_old_type) == ARRAY_TYPE
- && TYPE_NONALIASED_COMPONENT (gnu_new_type)
- != TYPE_NONALIASED_COMPONENT (gnu_old_type)));
+ gcc_assert (!(TREE_CODE (new_type) == ARRAY_TYPE
+ && TREE_CODE (old_type) == ARRAY_TYPE
+ && TYPE_NONALIASED_COMPONENT (new_type)
+ != TYPE_NONALIASED_COMPONENT (old_type)));
- TYPE_ALIAS_SET (gnu_new_type) = get_alias_set (gnu_old_type);
+ TYPE_ALIAS_SET (new_type) = get_alias_set (old_type);
break;
case ALIAS_SET_SUBSET:
case ALIAS_SET_SUPERSET:
{
- alias_set_type old_set = get_alias_set (gnu_old_type);
- alias_set_type new_set = get_alias_set (gnu_new_type);
+ alias_set_type old_set = get_alias_set (old_type);
+ alias_set_type new_set = get_alias_set (new_type);
/* Do nothing if the alias sets conflict. This ensures that we
never call record_alias_subset several times for the same pair
@@ -1895,7 +1893,7 @@ relate_alias_sets (tree gnu_new_type, tree gnu_old_type, enum alias_set_op op)
gcc_unreachable ();
}
- record_component_aliases (gnu_new_type);
+ record_component_aliases (new_type);
}
/* Record TYPE as a builtin type for Ada. NAME is the name of the type.