fold-const.c (build_fold_addr_expr_with_type): Take the address of the operand of...
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 20 May 2009 16:01:41 +0000 (16:01 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 20 May 2009 16:01:41 +0000 (16:01 +0000)
* fold-const.c (build_fold_addr_expr_with_type): Take the address of
the operand of VIEW_CONVERT_EXPR.

From-SVN: r147739

gcc/ChangeLog
gcc/fold-const.c

index 4ac176d..dd17f89 100644 (file)
@@ -1,3 +1,8 @@
+2009-05-20  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * 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  <hongjiu.lu@intel.com>
 
        * config/i386/driver-i386.c (host_detect_local_cpu): Check
index 4b8fe38..0ac9e29 100644 (file)
@@ -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);