Commit afb4afcd by Eric Botcazou Committed by Eric Botcazou

exp_dbug.ads: Adjust type names in comments.

	* exp_dbug.ads: Adjust type names in comments.
	* gcc-interface/decl.c (maybe_pad_type): Remove NAME_TRAILER parameter,
	add new IS_COMPONENT_TYPE parameter.  Adjust.  Remove dead code.
	(gnat_to_gnu_entity): Adjust for above change.
	(gnat_to_gnu_component_type): Likewise.
	(gnat_to_gnu_field): Likewise.
	* gcc-interface/trans.c (call_to_gnu): Likewise.  Do not unnecessarily
	call max_size.
	* gcc-interface/utils.c (finish_record_type): Remove obsolete code.
	* gcc-interface/gigi.h (maybe_pad_type): Adjust prototype.

From-SVN: r152916
parent 3b24c708
2009-10-16 Eric Botcazou <ebotcazou@adacore.com>
* exp_dbug.ads: Adjust type names in comments.
* gcc-interface/decl.c (maybe_pad_type): Remove NAME_TRAILER parameter,
add new IS_COMPONENT_TYPE parameter. Adjust. Remove dead code.
(gnat_to_gnu_entity): Adjust for above change.
(gnat_to_gnu_component_type): Likewise.
(gnat_to_gnu_field): Likewise.
* gcc-interface/trans.c (call_to_gnu): Likewise. Do not unnecessarily
call max_size.
* gcc-interface/utils.c (finish_record_type): Remove obsolete code.
* gcc-interface/gigi.h (maybe_pad_type): Adjust prototype.
2009-10-16 Joel Sherrill <joel.sherrill@oarcorp.com> 2009-10-16 Joel Sherrill <joel.sherrill@oarcorp.com>
* s-osinte-rtems.ads: Add mutex type to pthread_mutexattr_t * s-osinte-rtems.ads: Add mutex type to pthread_mutexattr_t
......
...@@ -873,12 +873,12 @@ package Exp_Dbug is ...@@ -873,12 +873,12 @@ package Exp_Dbug is
-- the element type for AT1 might have a type defined as if it had -- the element type for AT1 might have a type defined as if it had
-- been written: -- been written:
-- --
-- type at1___C_PAD is record null; end record; -- type at1___PAD is record null; end record;
-- for at1___C_PAD'Size use 16 * 8; -- for at1___PAD'Size use 16 * 8;
-- --
-- and there would also be -- and there would also be
-- --
-- type at1___C_PAD___XVS is record t1: Integer; end record; -- type at1___PAD___XVS is record t1: Integer; end record;
-- type t1 is ... -- type t1 is ...
-- --
-- Had the subtype Int been dynamic: -- Had the subtype Int been dynamic:
...@@ -888,7 +888,7 @@ package Exp_Dbug is ...@@ -888,7 +888,7 @@ package Exp_Dbug is
-- Then the compiler would also generate a declaration whose effect -- Then the compiler would also generate a declaration whose effect
-- would be -- would be
-- --
-- at1___C_PAD___XVZ: constant Integer := 32 + M * 8 + padding term; -- at1___PAD___XVZ: constant Integer := 32 + M * 8 + padding term;
-- --
-- Not all unconstrained types are so encoded; the XVS convention may be -- Not all unconstrained types are so encoded; the XVS convention may be
-- unnecessary for unconstrained types of fixed size. However, this -- unnecessary for unconstrained types of fixed size. However, this
......
...@@ -633,7 +633,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ...@@ -633,7 +633,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
else else
gnu_type gnu_type
= maybe_pad_type (gnu_type, NULL_TREE, align, gnat_entity, = maybe_pad_type (gnu_type, NULL_TREE, align, gnat_entity,
"PAD", false, definition, true); false, false, definition, true);
} }
/* If we are defining the object, see if it has a Size value and /* If we are defining the object, see if it has a Size value and
...@@ -838,7 +838,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ...@@ -838,7 +838,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
gnu_object_size = gnu_size ? gnu_size : TYPE_SIZE (gnu_type); gnu_object_size = gnu_size ? gnu_size : TYPE_SIZE (gnu_type);
if (gnu_size || align > 0) if (gnu_size || align > 0)
gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity, gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity,
"PAD", false, definition, false, false, definition,
gnu_size ? true : false); gnu_size ? true : false);
/* If this is a renaming, avoid as much as possible to create a new /* If this is a renaming, avoid as much as possible to create a new
...@@ -1017,8 +1017,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ...@@ -1017,8 +1017,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
&& !gnu_expr && !gnu_expr
&& TREE_CODE (gnu_type) == RECORD_TYPE && TREE_CODE (gnu_type) == RECORD_TYPE
&& (TYPE_CONTAINS_TEMPLATE_P (gnu_type) && (TYPE_CONTAINS_TEMPLATE_P (gnu_type)
/* Beware that padding might have been introduced /* Beware that padding might have been introduced above. */
via maybe_pad_type above. */
|| (TYPE_IS_PADDING_P (gnu_type) || (TYPE_IS_PADDING_P (gnu_type)
&& TREE_CODE (TREE_TYPE (TYPE_FIELDS (gnu_type))) && TREE_CODE (TREE_TYPE (TYPE_FIELDS (gnu_type)))
== RECORD_TYPE == RECORD_TYPE
...@@ -4446,7 +4445,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ...@@ -4446,7 +4445,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
us when we make the new TYPE_DECL below. */ us when we make the new TYPE_DECL below. */
if (gnu_size || align > 0) if (gnu_size || align > 0)
gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity, gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity,
"PAD", true, definition, false); false, true, definition, false);
if (TREE_CODE (gnu_type) == RECORD_TYPE if (TREE_CODE (gnu_type) == RECORD_TYPE
&& TYPE_IS_PADDING_P (gnu_type)) && TYPE_IS_PADDING_P (gnu_type))
...@@ -5037,7 +5036,7 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition, ...@@ -5037,7 +5036,7 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition,
orig_type = gnu_type; orig_type = gnu_type;
gnu_type = maybe_pad_type (gnu_type, gnu_comp_size, 0, gnat_array, gnu_type = maybe_pad_type (gnu_type, gnu_comp_size, 0, gnat_array,
"C_PAD", false, definition, true); true, false, definition, true);
/* If a padding record was made, declare it now since it will never be /* If a padding record was made, declare it now since it will never be
declared otherwise. This is necessary to ensure that its subtrees declared otherwise. This is necessary to ensure that its subtrees
...@@ -6046,25 +6045,20 @@ make_packable_type (tree type, bool in_record) ...@@ -6046,25 +6045,20 @@ make_packable_type (tree type, bool in_record)
/* Ensure that TYPE has SIZE and ALIGN. Make and return a new padded type /* Ensure that TYPE has SIZE and ALIGN. Make and return a new padded type
if needed. We have already verified that SIZE and TYPE are large enough. if needed. We have already verified that SIZE and TYPE are large enough.
GNAT_ENTITY is used to name the resulting record and to issue a warning.
GNAT_ENTITY and NAME_TRAILER are used to name the resulting record and IS_COMPONENT_TYPE is true if this is being done for the component type
to issue a warning. of an array. IS_USER_TYPE is true if we must complete the original type.
DEFINITION is true if this type is being defined. SAME_RM_SIZE is true
IS_USER_TYPE is true if we must complete the original type. if the RM size of the resulting type is to be set to SIZE too; otherwise,
it's set to the RM size of the original type. */
DEFINITION is true if this type is being defined.
SAME_RM_SIZE is true if the RM size of the resulting type is to be set
to SIZE too; otherwise, it's set to the RM size of the original type. */
tree tree
maybe_pad_type (tree type, tree size, unsigned int align, maybe_pad_type (tree type, tree size, unsigned int align,
Entity_Id gnat_entity, const char *name_trailer, Entity_Id gnat_entity, bool is_component_type,
bool is_user_type, bool definition, bool same_rm_size) bool is_user_type, bool definition, bool same_rm_size)
{ {
tree orig_rm_size = same_rm_size ? NULL_TREE : rm_size (type); tree orig_rm_size = same_rm_size ? NULL_TREE : rm_size (type);
tree orig_size = TYPE_SIZE (type); tree orig_size = TYPE_SIZE (type);
unsigned int orig_align = align;
tree record, field; tree record, field;
/* If TYPE is a padded type, see if it agrees with any size and alignment /* If TYPE is a padded type, see if it agrees with any size and alignment
...@@ -6124,15 +6118,12 @@ maybe_pad_type (tree type, tree size, unsigned int align, ...@@ -6124,15 +6118,12 @@ maybe_pad_type (tree type, tree size, unsigned int align,
TYPE_IS_PADDING_P (record) = 1; TYPE_IS_PADDING_P (record) = 1;
if (Present (gnat_entity)) if (Present (gnat_entity))
TYPE_NAME (record) = create_concat_name (gnat_entity, name_trailer); TYPE_NAME (record) = create_concat_name (gnat_entity, "PAD");
TYPE_VOLATILE (record) TYPE_VOLATILE (record)
= Present (gnat_entity) && Treat_As_Volatile (gnat_entity); = Present (gnat_entity) && Treat_As_Volatile (gnat_entity);
TYPE_ALIGN (record) = align; TYPE_ALIGN (record) = align;
if (orig_align)
TYPE_USER_ALIGN (record) = align;
TYPE_SIZE (record) = size ? size : orig_size; TYPE_SIZE (record) = size ? size : orig_size;
TYPE_SIZE_UNIT (record) TYPE_SIZE_UNIT (record)
= convert (sizetype, = convert (sizetype,
...@@ -6256,7 +6247,7 @@ maybe_pad_type (tree type, tree size, unsigned int align, ...@@ -6256,7 +6247,7 @@ maybe_pad_type (tree type, tree size, unsigned int align,
post_error_ne_tree ("{^ }bits of & unused?", post_error_ne_tree ("{^ }bits of & unused?",
gnat_error_node, gnat_entity, gnat_error_node, gnat_entity,
size_diffop (size, orig_size)); size_diffop (size, orig_size));
else if (name_trailer[0] == 'C') else if (is_component_type)
post_error_ne_tree ("component of& padded{ by ^ bits}?", post_error_ne_tree ("component of& padded{ by ^ bits}?",
gnat_entity, gnat_entity, gnat_entity, gnat_entity,
size_diffop (size, orig_size)); size_diffop (size, orig_size));
...@@ -6634,7 +6625,7 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed, ...@@ -6634,7 +6625,7 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed,
orig_field_type = gnu_field_type; orig_field_type = gnu_field_type;
gnu_field_type = maybe_pad_type (gnu_field_type, gnu_size, 0, gnat_field, gnu_field_type = maybe_pad_type (gnu_field_type, gnu_size, 0, gnat_field,
"PAD", false, definition, true); false, false, definition, true);
/* If a padding record was made, declare it now since it will never be /* If a padding record was made, declare it now since it will never be
declared otherwise. This is necessary to ensure that its subtrees declared otherwise. This is necessary to ensure that its subtrees
......
...@@ -124,21 +124,16 @@ extern tree make_aligning_type (tree type, unsigned int align, tree size, ...@@ -124,21 +124,16 @@ extern tree make_aligning_type (tree type, unsigned int align, tree size,
/* Ensure that TYPE has SIZE and ALIGN. Make and return a new padded type /* Ensure that TYPE has SIZE and ALIGN. Make and return a new padded type
if needed. We have already verified that SIZE and TYPE are large enough. if needed. We have already verified that SIZE and TYPE are large enough.
GNAT_ENTITY is used to name the resulting record and to issue a warning.
GNAT_ENTITY and NAME_TRAILER are used to name the resulting record and IS_COMPONENT_TYPE is true if this is being done for the component type
to issue a warning. of an array. IS_USER_TYPE is true if we must complete the original type.
DEFINITION is true if this type is being defined. SAME_RM_SIZE is true
IS_USER_TYPE is true if we must be sure we complete the original type. if the RM size of the resulting type is to be set to SIZE too; otherwise,
it's set to the RM size of the original type. */
DEFINITION is true if this type is being defined.
SAME_RM_SIZE is true if the RM_Size of the resulting type is to be
set to its TYPE_SIZE; otherwise, it's set to the RM_Size of the original
type. */
extern tree maybe_pad_type (tree type, tree size, unsigned int align, extern tree maybe_pad_type (tree type, tree size, unsigned int align,
Entity_Id gnat_entity, const char *name_trailer, Entity_Id gnat_entity, bool is_component_type,
bool is_user_type, bool definition, bool is_user_type, bool definition,
bool same_rm_size); bool same_rm_size);
/* Given a GNU tree and a GNAT list of choices, generate an expression to test /* Given a GNU tree and a GNAT list of choices, generate an expression to test
the value passed against the list of choices. */ the value passed against the list of choices. */
......
...@@ -2423,22 +2423,27 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) ...@@ -2423,22 +2423,27 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target)
} }
} }
/* If we are calling by supplying a pointer to a target, set up that /* If we are calling by supplying a pointer to a target, set up that pointer
pointer as the first argument. Use GNU_TARGET if one was passed; as the first argument. Use GNU_TARGET if one was passed; otherwise, make
otherwise, make a target by building a variable of the maximum size a target by building a variable and use the maximum size of the type if
of the type. */ it has self-referential size. */
if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type)) if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type))
{ {
tree gnu_real_ret_type tree gnu_ret_type
= TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (gnu_subprog_type))); = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (gnu_subprog_type)));
if (!gnu_target) if (!gnu_target)
{ {
tree gnu_obj_type tree gnu_obj_type;
= maybe_pad_type (gnu_real_ret_type,
max_size (TYPE_SIZE (gnu_real_ret_type), true), if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_ret_type)))
0, Etype (Name (gnat_node)), "PAD", false, gnu_obj_type
false, false); = maybe_pad_type (gnu_ret_type,
max_size (TYPE_SIZE (gnu_ret_type), true),
0, Etype (Name (gnat_node)), false, false,
false, true);
else
gnu_obj_type = gnu_ret_type;
/* ??? We may be about to create a static temporary if we happen to /* ??? We may be about to create a static temporary if we happen to
be at the global binding level. That's a regression from what be at the global binding level. That's a regression from what
...@@ -2454,7 +2459,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) ...@@ -2454,7 +2459,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target)
gnu_actual_list gnu_actual_list
= tree_cons (NULL_TREE, = tree_cons (NULL_TREE,
build_unary_op (ADDR_EXPR, NULL_TREE, build_unary_op (ADDR_EXPR, NULL_TREE,
unchecked_convert (gnu_real_ret_type, unchecked_convert (gnu_ret_type,
gnu_target, gnu_target,
false)), false)),
NULL_TREE); NULL_TREE);
......
...@@ -739,11 +739,6 @@ finish_record_type (tree record_type, tree fieldlist, int rep_level, ...@@ -739,11 +739,6 @@ finish_record_type (tree record_type, tree fieldlist, int rep_level,
if (code == QUAL_UNION_TYPE) if (code == QUAL_UNION_TYPE)
nreverse (fieldlist); nreverse (fieldlist);
/* If the type is discriminated, it can be used to access all its
constrained subtypes, so force structural equality checks. */
if (CONTAINS_PLACEHOLDER_P (size))
SET_TYPE_STRUCTURAL_EQUALITY (record_type);
if (rep_level < 2) if (rep_level < 2)
{ {
/* If this is a padding record, we never want to make the size smaller /* If this is a padding record, we never want to make the size smaller
......
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