* PR 15693 fix.
authorFrank Ch. Eigler <fche@redhat.com>
Tue, 16 Jun 1998 08:30:47 +0000 (08:30 +0000)
committerFrank Ch. Eigler <fche@redhat.com>
Tue, 16 Jun 1998 08:30:47 +0000 (08:30 +0000)
Wed Jun 10 18:04:35 1998  Frank Ch. Eigler  <fche@cygnus.com>
* gdbtypes.c (get_discrete_bounds): Assign unsigned type flag for
all-positive enum.
(create_set_type): Ditto for all-positive set values.
* values.c (unpack_field_as_long): Check for typedef in struct
field unpacking.

gdb/ChangeLog
gdb/gdbtypes.c
gdb/values.c

index 073b583003c55fd63c8fc3e4d3e0838af8ee1719..32d0820af6573a4a00b57e61881a9b7f928ab63b 100644 (file)
@@ -52,6 +52,14 @@ end-sanitize-java
        * (decode_line_1):  Move local variable defs into the block they are
        used in.  (Improves code readability.)
        
+Wed Jun 10 18:04:35 1998  Frank Ch. Eigler  <fche@cygnus.com>
+       * gdbtypes.c (get_discrete_bounds): Assign unsigned type flag for
+       all-positive enum.
+       (create_set_type): Ditto for all-positive set values.
+       * values.c (unpack_field_as_long): Check for typedef in struct
+       field unpacking.
+
 Wed Jun 10 14:06:05 1998  Jason Molenda  (crash@bugshack.cygnus.com)
 
        * configure.in: Add some tests for gnu-regex.c's benefit.
index 7027cc9f22ed966c621e4980d68dc79d56bc054c..d55a87a0bc72ef849f71d61fcf6df54026fe1960 100644 (file)
@@ -395,6 +395,12 @@ get_discrete_bounds (type, lowp, highp)
              if (TYPE_FIELD_BITPOS (type, i) > *highp)
                *highp = TYPE_FIELD_BITPOS (type, i);
            }
+
+         /* Set unsigned indicator if warranted. */
+         if(*lowp >= 0)
+           {
+             TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
+           }
        }
       else
        {
@@ -519,6 +525,10 @@ create_set_type (result_type, domain_type)
        = (bit_length + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT;
     }
   TYPE_FIELD_TYPE (result_type, 0) = domain_type;
+
+  if(low_bound >= 0)
+    TYPE_FLAGS (result_type) |= TYPE_FLAG_UNSIGNED;
+
   return (result_type);
 }
 
index 3d4d45e96da280ace779bbbc0975419b02b79b1a..d7be2b00aff9218e57c88c7243bd4e6c402b7c1c 100644 (file)
@@ -1180,8 +1180,11 @@ unpack_field_as_long (type, valaddr, fieldno)
   int bitpos = TYPE_FIELD_BITPOS (type, fieldno);
   int bitsize = TYPE_FIELD_BITSIZE (type, fieldno);
   int lsbcount;
+  struct type *field_type;
 
   val = extract_unsigned_integer (valaddr + bitpos / 8, sizeof (val));
+  field_type = TYPE_FIELD_TYPE (type, fieldno);
+  CHECK_TYPEDEF (field_type);
 
   /* Extract bits.  See comment above. */
 
@@ -1198,7 +1201,7 @@ unpack_field_as_long (type, valaddr, fieldno)
     {
       valmask = (((ULONGEST) 1) << bitsize) - 1;
       val &= valmask;
-      if (!TYPE_UNSIGNED (TYPE_FIELD_TYPE (type, fieldno)))
+      if (!TYPE_UNSIGNED (field_type))
        {
          if (val & (valmask ^ (valmask >> 1)))
            {