Make range types inherit signed-ness from base type
authorTom Tromey <tom@tromey.com>
Sat, 17 Oct 2020 17:41:59 +0000 (11:41 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 17 Oct 2020 17:41:59 +0000 (11:41 -0600)
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.

gdb/ChangeLog
gdb/gdbtypes.c
gdb/m2-valprint.c
gdb/valprint.c

index 9ed649314f588e00e9b68e69c4916e6dfd7ed21e..fc4b716fff3a85c4f18d3da6f237cdc9ae75847d 100644 (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
index 43c05d344d0b5b8265c5a065d277ab6c0951f047..e7d9e4cef3e004218d028005803ab09d36877ade 100644 (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 ());
 
index 9f5ce7e9a271839e792c04355e8a0df4382339a2..c285543f4bfd5379f1b9732c91b51ed4519b4a12 100644 (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:
index 0749f38983e39df6a17804e65ab5e5721280598a..dd70a1a3933957998ed6de8ec3560c2ba47635a7 100644 (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;