Commit fdb6603c by Julian Brown Committed by Chung-Lin Tang

dwarf2out.c (gen_enumeration_type_die): Fix HOST_BITS_PER_WIDE_INT dependency…

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
parent b1df40cb
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.
2013-04-23 Lawrence Crowl <crowl@google.com> 2013-04-23 Lawrence Crowl <crowl@google.com>
* Makefile.in: Update as needed below. * Makefile.in: Update as needed below.
......
...@@ -17027,15 +17027,27 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die) ...@@ -17027,15 +17027,27 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die)
if (TREE_CODE (value) == CONST_DECL) if (TREE_CODE (value) == CONST_DECL)
value = DECL_INITIAL (value); 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 /* DWARF2 does not provide a way of indicating whether or
not enumeration constants are signed or unsigned. GDB not enumeration constants are signed or unsigned. GDB
always assumes the values are signed, so we output all always assumes the values are signed, so we output all
values as if they were signed. That means that values as if they were signed. That means that
enumeration constants with very large unsigned values enumeration constants with very large unsigned values
will appear to have negative values in the debugger. */ 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)); 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); add_gnat_descriptive_type_attribute (type_die, type, context_die);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment