Make range types inherit signed-ness from base type

I ran across this comment in valprint.c:

      /* FIXME: create_static_range_type does not set the unsigned bit in a
         range type (I think it probably should copy it from the target
         type), so we won't print values which are too large to
         fit in a signed integer correctly.  */

It seems to me that a range type ought to inherit its signed-ness from
the underlying type, so this patch implements this change, and removes
the comment.  (It was also copied into m2-valprint.c.)

I also remove the comment about handling ranges of enums, because I
think that comment is incorrect.

gdb/ChangeLog
2020-10-17  Tom Tromey  <tom@tromey.com>

	* valprint.c (generic_value_print): Remove comment.
	* m2-valprint.c (m2_value_print_inner): Remove comment.
	* gdbtypes.c (create_range_type): Set TYPE_UNSIGNED from base
	type.
This commit is contained in:
Tom Tromey 2020-10-17 11:41:59 -06:00
parent 9717970a4e
commit cfabbd351a
4 changed files with 8 additions and 27 deletions

View file

@ -950,16 +950,7 @@ create_range_type (struct type *result_type, struct type *index_type,
result_type->set_bounds (bounds);
if (low_bound->kind () == PROP_CONST && low_bound->const_val () >= 0)
result_type->set_is_unsigned (true);
/* Ada allows the declaration of range types whose upper bound is
less than the lower bound, so checking the lower bound is not
enough. Make sure we do not mark a range type whose upper bound
is negative as unsigned. */
if (high_bound->kind () == PROP_CONST && high_bound->const_val () < 0)
result_type->set_is_unsigned (false);
result_type->set_is_unsigned (index_type->is_unsigned ());
result_type->set_endianity_is_not_default
(index_type->endianity_is_not_default ());