aboutsummaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorJulian Brown <julian@codesourcery.com>2013-04-24 10:07:24 +0000
committerChung-Lin Tang <cltang@gcc.gnu.org>2013-04-24 10:07:24 +0000
commitfdb6603cc395d2d29e50b0078b46b130d66ac7b4 (patch)
treee6df1a20befb5c8c1f9d5d05b5fa1add81d89429 /gcc/dwarf2out.c
parentb1df40cb0eb7fd402cc683ca3a36d297db225199 (diff)
downloadgcc-fdb6603cc395d2d29e50b0078b46b130d66ac7b4.zip
gcc-fdb6603cc395d2d29e50b0078b46b130d66ac7b4.tar.gz
gcc-fdb6603cc395d2d29e50b0078b46b130d66ac7b4.tar.bz2
dwarf2out.c (gen_enumeration_type_die): Fix HOST_BITS_PER_WIDE_INT dependency behavior in enumeration type DIE generation.
2013-04-24 Julian Brown <julian@codesourcery.com> Chung-Lin Tang <cltang@codesourcery.com> * dwarf2out.c (gen_enumeration_type_die): Fix HOST_BITS_PER_WIDE_INT dependency behavior in enumeration type DIE generation. Add TODO note to comments about future DW_FORM_sdata/udata re-work of related code. Co-Authored-By: Chung-Lin Tang <cltang@codesourcery.com> From-SVN: r198219
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index b067b86..6fe1e69 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -17027,15 +17027,27 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die)
if (TREE_CODE (value) == CONST_DECL)
value = DECL_INITIAL (value);
- if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
+ if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value)))
+ && (simple_type_size_in_bits (TREE_TYPE (value))
+ <= HOST_BITS_PER_WIDE_INT || host_integerp (value, 0)))
/* DWARF2 does not provide a way of indicating whether or
not enumeration constants are signed or unsigned. GDB
always assumes the values are signed, so we output all
values as if they were signed. That means that
enumeration constants with very large unsigned values
- will appear to have negative values in the debugger. */
- add_AT_int (enum_die, DW_AT_const_value,
- tree_low_cst (value, tree_int_cst_sgn (value) > 0));
+ will appear to have negative values in the debugger.
+
+ TODO: the above comment is wrong, DWARF2 does provide
+ DW_FORM_sdata/DW_FORM_udata to represent signed/unsigned data.
+ This should be re-worked to use correct signed/unsigned
+ int/double tags for all cases, instead of always treating as
+ signed. */
+ add_AT_int (enum_die, DW_AT_const_value, TREE_INT_CST_LOW (value));
+ else
+ /* Enumeration constants may be wider than HOST_WIDE_INT. Handle
+ that here. */
+ add_AT_double (enum_die, DW_AT_const_value,
+ TREE_INT_CST_HIGH (value), TREE_INT_CST_LOW (value));
}
add_gnat_descriptive_type_attribute (type_die, type, context_die);