diff options
author | Pierre-Marie de Rodat <derodat@adacore.com> | 2015-12-17 14:10:24 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2015-12-17 14:10:24 +0000 |
commit | 69c5f9d7b57c82797154bdc199e69326ac981101 (patch) | |
tree | 4b1283cf84906d22bbc457ae4eb42f1b824396c1 /gcc/ada/gcc-interface/misc.c | |
parent | 98088266e55b9c34ff9b0852fa9a7c559594cdcd (diff) | |
download | gcc-69c5f9d7b57c82797154bdc199e69326ac981101.zip gcc-69c5f9d7b57c82797154bdc199e69326ac981101.tar.gz gcc-69c5f9d7b57c82797154bdc199e69326ac981101.tar.bz2 |
DWARF: add a language hook for scalar biased types
Front-ends like GNAT for Ada sometimes use biased encodings for integral
types. This change creates a new language hook so that the bias
information can make it into the debugging information back-end and
introduces an experimental DWARF attribute to hold it.
gcc/ada/ChangeLog:
* gcc-interface/misc.c (gnat_get_type_bias): New.
(LANG_HOOKS_GET_TYPE_BIAS): Redefine macro to implement the
get_type_bias language hook.
gcc/ChangeLog:
* langhooks.h (struct lang_hooks_for_types): New get_bias_field.
* langhooks-def.h (LANG_HOOKS_GET_TYPE_BIAS): New.
(LANG_HOOKS_FOR_TYPES_INITIALIZER): Initialize the
get_bias_field.
* dwarf2out.c
(base_type_die): In non-strict DWARF mode, invoke the
get_type_bias language hook for INTEGER_TYPE nodes. If it
returns a bias, emit an attribute for it.
(subrange_type_die): Change signature to handle bias. If
non-strict DWARF mode, emit an attribute for it, if one passed.
(modified_type_die): For subrange types, invoke the
get_type_bias langage hook and pass the bias to
subrange_type_die.
From-SVN: r231767
Diffstat (limited to 'gcc/ada/gcc-interface/misc.c')
-rw-r--r-- | gcc/ada/gcc-interface/misc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c index 891ca3f..269960f 100644 --- a/gcc/ada/gcc-interface/misc.c +++ b/gcc/ada/gcc-interface/misc.c @@ -977,6 +977,16 @@ gnat_get_subrange_bounds (const_tree gnu_type, tree *lowval, tree *highval) *highval = TYPE_MAX_VALUE (gnu_type); } +static tree +gnat_get_type_bias (const_tree gnu_type) +{ + if (TREE_CODE (gnu_type) == INTEGER_TYPE + && TYPE_BIASED_REPRESENTATION_P (gnu_type) + && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL) + return TYPE_RM_MIN_VALUE(gnu_type); + return NULL_TREE; +} + /* GNU_TYPE is the type of a subprogram parameter. Determine if it should be passed by reference by default. */ @@ -1276,6 +1286,8 @@ get_lang_specific (tree node) #define LANG_HOOKS_GET_ARRAY_DESCR_INFO gnat_get_array_descr_info #undef LANG_HOOKS_GET_SUBRANGE_BOUNDS #define LANG_HOOKS_GET_SUBRANGE_BOUNDS gnat_get_subrange_bounds +#undef LANG_HOOKS_GET_TYPE_BIAS +#define LANG_HOOKS_GET_TYPE_BIAS gnat_get_type_bias #undef LANG_HOOKS_DESCRIPTIVE_TYPE #define LANG_HOOKS_DESCRIPTIVE_TYPE gnat_descriptive_type #undef LANG_HOOKS_GET_DEBUG_TYPE |