OSDN Git Service

* fold-const.c (build_fold_addr_expr_with_type): Take the address of
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 May 2009 16:01:41 +0000 (16:01 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 May 2009 16:01:41 +0000 (16:01 +0000)
the operand of VIEW_CONVERT_EXPR.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147739 138bc75d-0d04-0410-961f-82ee72b054a4

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);