From 0fba720823fddbd867885ead13999d5fed9ac9ae Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Wed, 11 Oct 2000 10:04:03 +0000 Subject: [PATCH] tree.c (get_narrower): Don't look at precision of field if not laid out yet. * tree.c (get_narrower): Don't look at precision of field if not laid out yet. From-SVN: r36837 --- gcc/ChangeLog | 5 +++++ gcc/tree.c | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b55b4c23d83..52e180f1c4d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 11 06:15:41 2000 Richard Kenner + + * 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 * config/avr/avr.c (valid_machine_decl_attribute): Allow `extern' diff --git a/gcc/tree.c b/gcc/tree.c index 6eafd910edf..fab3d1de0c9 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -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, -- 2.30.2