diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2000-10-11 10:04:03 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2000-10-11 06:04:03 -0400 |
commit | 0fba720823fddbd867885ead13999d5fed9ac9ae (patch) | |
tree | 4f21a8f7157e841a82606063245e3c5d8dd5c496 /gcc/tree.c | |
parent | 18a61d1cb2beda914a91ca0740b3715f1e51ff74 (diff) | |
download | gcc-0fba720823fddbd867885ead13999d5fed9ac9ae.zip gcc-0fba720823fddbd867885ead13999d5fed9ac9ae.tar.gz gcc-0fba720823fddbd867885ead13999d5fed9ac9ae.tar.bz2 |
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
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -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, |