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

@ -1,3 +1,10 @@
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.
2020-10-17 Tom de Vries <tdevries@suse.de>
PR symtab/26317

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 ());

View file

@ -448,13 +448,6 @@ m2_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
m2_value_print_inner (v, stream, recurse, options);
break;
}
/* 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. */
/* FIXME: Doesn't handle ranges of enums correctly. (Can't just
print with the target type, though, because the size of our type
and the target type might differ). */
/* FALLTHROUGH */
case TYPE_CODE_REF:

View file

@ -893,16 +893,6 @@ generic_value_print (struct value *val, struct ui_file *stream, int recurse,
break;
case TYPE_CODE_RANGE:
/* 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. */
/* FIXME: Doesn't handle ranges of enums correctly. (Can't just
print with the target type, though, because the size of our
type and the target type might differ). */
/* FALLTHROUGH */
case TYPE_CODE_INT:
generic_value_print_int (val, stream, options);
break;