utils.c (maybe_pad_type): In type_annotate_only mode...

* gcc-interface/utils.c (maybe_pad_type): In type_annotate_only mode,
	retrieve the component type if this is an array and do not issue the
	warning for concurrent types.

From-SVN: r231859
This commit is contained in:
Eric Botcazou 2015-12-20 10:27:37 +00:00 committed by Eric Botcazou
parent afeb246c1b
commit 80746f5d88
2 changed files with 23 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2015-12-20 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/utils.c (maybe_pad_type): In type_annotate_only mode,
retrieve the component type if this is an array and do not issue the
warning for concurrent types.
2015-12-18 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/ada-tree.h (TYPE_DEBUG_TYPE): Remove duplicate.

View File

@ -1411,19 +1411,28 @@ maybe_pad_type (tree type, tree size, unsigned int align,
rest_of_record_type_compilation (record);
built:
/* If the size was widened explicitly, maybe give a warning. Take the
original size as the maximum size of the input if there was an
unconstrained record involved and round it up to the specified alignment,
if one was specified. But don't do it if we are just annotating types
and the type is tagged, since tagged types aren't fully laid out in this
mode. */
/* If a simple size was explicitly given, maybe issue a warning. */
if (!size
|| TREE_CODE (size) == COND_EXPR
|| TREE_CODE (size) == MAX_EXPR
|| No (gnat_entity)
|| (type_annotate_only && Is_Tagged_Type (Etype (gnat_entity))))
|| No (gnat_entity))
return record;
/* But don't do it if we are just annotating types and the type is tagged or
concurrent, since these types aren't fully laid out in this mode. */
if (type_annotate_only)
{
Entity_Id gnat_type
= is_component_type
? Component_Type (gnat_entity) : Etype (gnat_entity);
if (Is_Tagged_Type (gnat_type) || Is_Concurrent_Type (gnat_type))
return record;
}
/* Take the original size as the maximum size of the input if there was an
unconstrained record involved and round it up to the specified alignment,
if one was specified, but only for aggregate types. */
if (CONTAINS_PLACEHOLDER_P (orig_size))
orig_size = max_size (orig_size, true);