tree.c (get_narrower): Don't look at precision of field if not laid out yet.
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Wed, 11 Oct 2000 10:04:03 +0000 (10:04 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Wed, 11 Oct 2000 10:04:03 +0000 (06:04 -0400)
* tree.c (get_narrower): Don't look at precision of field if
not laid out yet.

From-SVN: r36837

gcc/ChangeLog
gcc/tree.c

index b55b4c2..52e180f 100644 (file)
@@ -1,3 +1,8 @@
+Wed Oct 11 06:15:41 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * tree.c (get_narrower): Don't look at precision of field if
+       not laid out yet.
+
 Tue Oct 10 23:14:33 2000  Denis Chertykov  <denisc@overta.ru>
 
        * config/avr/avr.c (valid_machine_decl_attribute): Allow `extern'
index 6eafd91..fab3d1d 100644 (file)
@@ -5052,11 +5052,12 @@ get_narrower (op, unsignedp_ptr)
 
   if (TREE_CODE (op) == COMPONENT_REF
       /* Since type_for_size always gives an integer type.  */
-      && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE)
+      && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
+      /* Ensure field is laid out already.  */
+      && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
     {
-      unsigned int innerprec
-       = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
-
+      unsigned HOST_WIDE_INT innerprec
+       = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
       tree type = type_for_size (innerprec, TREE_UNSIGNED (op));
 
       /* We can get this structure field in a narrower type that fits it,