Do not change type in get_discrete_low_bound
authorTom Tromey <tromey@adacore.com>
Thu, 27 Apr 2023 19:25:27 +0000 (13:25 -0600)
committerTom Tromey <tromey@adacore.com>
Fri, 28 Apr 2023 17:05:45 +0000 (11:05 -0600)
get_discrete_low_bound has this code:

    /* Set unsigned indicator if warranted.  */
    if (low >= 0)
      type->set_is_unsigned (true);

It's bad to modify a type in a getter like this, so this patch removes
this code.  FWIW I looked and this code has been there since at least
1999 (it was in the initial sourceware import).

Types in general would benefit from const-ification, which would
probably reveal more code like this, but I haven't attempted that.

Regression tested on x86-64 Fedora 36.

Reviewed-by: Kevin Buettner <kevinb@redhat.com>
gdb/gdbtypes.c

index 6af59351b764b72c74f1060ebe08c083a7af4c05..c8d5314bce7e7e827025fae45d5ad3104bed9f0f 100644 (file)
@@ -1084,10 +1084,6 @@ get_discrete_low_bound (struct type *type)
                  low = type->field (i).loc_enumval ();
              }
 
-           /* Set unsigned indicator if warranted.  */
-           if (low >= 0)
-             type->set_is_unsigned (true);
-
            return low;
          }
        else