diff options
author | Pierre-Marie de Rodat <derodat@adacore.com> | 2015-12-17 14:10:32 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2015-12-17 14:10:32 +0000 |
commit | 2d5958875d2df15d6d04a3371dd6b54ec14a4e53 (patch) | |
tree | 5c7367eb96eaa74caac0e65ec96a0af93b99340e /gcc/ada/gcc-interface/ada-tree.h | |
parent | 69c5f9d7b57c82797154bdc199e69326ac981101 (diff) | |
download | gcc-2d5958875d2df15d6d04a3371dd6b54ec14a4e53.zip gcc-2d5958875d2df15d6d04a3371dd6b54ec14a4e53.tar.gz gcc-2d5958875d2df15d6d04a3371dd6b54ec14a4e53.tar.bz2 |
DWARF: describe properly Ada packed arrays
gcc/ada/ChangeLog:
* gcc-interface/ada-tree.h
(TYPE_IMPLEMENTS_PACKED_ARRAY_P, TYPE_CAN_HAVE_DEBUG_TYPE_P,
TYPE_ORIGINAL_PACKED_ARRAY, SET_TYPE_ORIGINAL_PACKED_ARRAY): New
macros.
* gcc-interface/decl.c (add_parallel_type_for_packed_array):
Rename to associate_original_type_to_packed_array. When
-fgnat-encodings=minimal, set original packed array type as so
instead of as a parallel type to the implementation type. In
this case, also rename the implementation type to the name of
the original array type.
(gnat_to_gnu_entity): Update invocations to
add_parallel_type_for_packed_array. Tag ARRAY_TYPE nodes for
packed arrays with the TYPE_PACKED flag.
When -fgnat-encodings=minimal:
- strip ___XP suffixes in packed arrays' names;
- set the debug type for padding records around packed arrays
to the packed array;
- do not attach ___XUP types as parallel types of constrained
array types.
* gcc-interface/misc.c (gnat_print_type): Update to handle
orignal packed arrays.
(gnat_get_debug_type): Update to reject packed arrays
implementation types.
(get_array_bit_stride): New.
(gnat_get_array_descr_info): Add packed arrays handling.
* gcc-interface/utils.c (maybe_pad_type): When
-fgnat-encodings=minimal, set the name of the padding type to
the one of the original packed type, if any. Fix TYPE_DECL
peeling around the name of the input type.
From-SVN: r231768
Diffstat (limited to 'gcc/ada/gcc-interface/ada-tree.h')
-rw-r--r-- | gcc/ada/gcc-interface/ada-tree.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ada/gcc-interface/ada-tree.h b/gcc/ada/gcc-interface/ada-tree.h index 709fdc2..8300627 100644 --- a/gcc/ada/gcc-interface/ada-tree.h +++ b/gcc/ada/gcc-interface/ada-tree.h @@ -187,6 +187,17 @@ do { \ alignment value the type ought to have. */ #define TYPE_MAX_ALIGN(NODE) (TYPE_PRECISION (RECORD_OR_UNION_CHECK (NODE))) +/* True for types that implement a packed array and for original packed array + types. */ +#define TYPE_IMPLEMENTS_PACKED_ARRAY_P(NODE) \ + ((TREE_CODE (NODE) == ARRAY_TYPE && TYPE_PACKED (NODE)) \ + || (TREE_CODE (NODE) == INTEGER_TYPE && TYPE_PACKED_ARRAY_TYPE_P (NODE))) \ + +/* True for types that can hold a debug type. */ +#define TYPE_CAN_HAVE_DEBUG_TYPE_P(NODE) \ + (!TYPE_IMPLEMENTS_PACKED_ARRAY_P (NODE) \ + && TYPE_DEBUG_TYPE (NODE) != NULL_TREE) + /* For an UNCONSTRAINED_ARRAY_TYPE, this is the record containing both the template and the object. @@ -374,6 +385,21 @@ do { \ #define SET_TYPE_SCALE_FACTOR(NODE, X) \ SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X) +/* For types with TYPE_CAN_HAVE_DEBUG_TYPE_P, this is the type to use in + debugging information. */ +#define TYPE_DEBUG_TYPE(NODE) \ + GET_TYPE_LANG_SPECIFIC2(NODE) +#define SET_TYPE_DEBUG_TYPE(NODE, X) \ + SET_TYPE_LANG_SPECIFIC2(NODE, X) + +/* For types with TYPE_IMPLEMENTS_PACKED_ARRAY_P, this is the original packed + array type. Note that this predicate is trou for original packed array + types, so these cannot have a debug type. */ +#define TYPE_ORIGINAL_PACKED_ARRAY(NODE) \ + GET_TYPE_LANG_SPECIFIC2(NODE) +#define SET_TYPE_ORIGINAL_PACKED_ARRAY(NODE, X) \ + SET_TYPE_LANG_SPECIFIC2(NODE, X) + /* Flags added to decl nodes. */ |