diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4ac176ddec20..dd17f89fce9f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-05-20 Eric Botcazou + + * fold-const.c (build_fold_addr_expr_with_type): Take the address of + the operand of VIEW_CONVERT_EXPR. + 2009-05-20 H.J. Lu * config/i386/driver-i386.c (host_detect_local_cpu): Check diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 4b8fe3894af5..0ac9e296c66d 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -7999,6 +7999,13 @@ build_fold_addr_expr_with_type (tree t, tree ptrtype) if (TREE_TYPE (t) != ptrtype) t = build1 (NOP_EXPR, ptrtype, t); } + else if (TREE_CODE (t) == VIEW_CONVERT_EXPR) + { + t = build_fold_addr_expr (TREE_OPERAND (t, 0)); + + if (TREE_TYPE (t) != ptrtype) + t = fold_convert (ptrtype, t); + } else t = build1 (ADDR_EXPR, ptrtype, t);