diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d78270596b99..90346378ae28 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-01-05 Richard Guenther + + PR middle-end/27826 + * tree.c (get_narrower): Do not construct COMPONENT_REFs + with mismatched types. Instead explicitly build a + conversion NOP_EXPR. + 2007-01-05 Jakub Jelinek PR c/30360 diff --git a/gcc/tree.c b/gcc/tree.c index d2aafdf57cb9..3cba08c4211e 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -5635,12 +5635,10 @@ get_narrower (tree op, int *unsignedp_ptr) { if (first) uns = DECL_UNSIGNED (TREE_OPERAND (op, 1)); - win = build3 (COMPONENT_REF, type, TREE_OPERAND (op, 0), - TREE_OPERAND (op, 1), NULL_TREE); - TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op); - TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op); + win = fold_convert (type, op); } } + *unsignedp_ptr = uns; return win; }