From 80746f5d88a60d13bc63f2f76a9dc547261b9601 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sun, 20 Dec 2015 10:27:37 +0000 Subject: 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 --- gcc/ada/gcc-interface/utils.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'gcc/ada/gcc-interface/utils.c') diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index be3565a..779c376 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -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); -- cgit v1.1