OSDN Git Service

* tree.c (get_unwidened): Check TREE_UNSIGNED on the field's type.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Oct 2003 02:19:38 +0000 (02:19 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Oct 2003 02:19:38 +0000 (02:19 +0000)
        (get_narrower): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72787 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree.c

index afcd8bc..1ec1165 100644 (file)
@@ -1,5 +1,8 @@
 2003-10-21  Jason Merrill  <jason@redhat.com>
 
+       * tree.c (get_unwidened): Check TREE_UNSIGNED on the field's type.
+       (get_narrower): Likewise.
+
        * stor-layout.c (layout_decl): Do packed field alignment for
        bit-fields, too.
 
index dd8378e..7d0258c 100644 (file)
@@ -4105,7 +4105,8 @@ get_unwidened (tree op, tree for_type)
     {
       unsigned int innerprec
        = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
-      int unsignedp = TREE_UNSIGNED (TREE_OPERAND (op, 1));
+      int unsignedp = (TREE_UNSIGNED (TREE_OPERAND (op, 1))
+                      || TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
       type = (*lang_hooks.types.type_for_size) (innerprec, unsignedp);
 
       /* We can get this structure field in the narrowest type it fits in.
@@ -4189,8 +4190,9 @@ get_narrower (tree op, int *unsignedp_ptr)
     {
       unsigned HOST_WIDE_INT innerprec
        = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
-      tree type = (*lang_hooks.types.type_for_size) (innerprec,
-                                                    TREE_UNSIGNED (op));
+      int unsignedp = (TREE_UNSIGNED (TREE_OPERAND (op, 1))
+                      || TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
+      tree type = (*lang_hooks.types.type_for_size) (innerprec, unsignedp);
 
       /* We can get this structure field in a narrower type that fits it,
         but the resulting extension to its nominal type (a fullword type)