aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimplify.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-08-13 08:19:10 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-08-13 08:19:10 +0000
commite5fdcd8cc54cacb910bd9730ce60626b155f1bb1 (patch)
tree19e33361b8467654e1998b29231dec999536e09a /gcc/gimplify.c
parent61a28f2135b9e22ef505ee60f92031a48263e0b0 (diff)
downloadgcc-e5fdcd8cc54cacb910bd9730ce60626b155f1bb1.zip
gcc-e5fdcd8cc54cacb910bd9730ce60626b155f1bb1.tar.gz
gcc-e5fdcd8cc54cacb910bd9730ce60626b155f1bb1.tar.bz2
re PR middle-end/41047 (gcc.target/mips/memcpy-1.c failing)
2009-08-13 Richard Guenther <rguenther@suse.de> PR middle-end/41047 * tree-ssa-ccp.c (ccp_fold): When folding pointer additions use the constant pointer type. * gimplify.c (canonicalize_addr_expr): Canonicalize independent of CV qualifiers on the target pointer type. * tree-ssa.c (useless_type_conversion_p): Move incomplete pointer conversion check before restrict check. * gcc.dg/tree-ssa/ssa-ccp-27.c: New testcase. From-SVN: r150715
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r--gcc/gimplify.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index eaea16d..7de2a7e 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1763,7 +1763,8 @@ canonicalize_addr_expr (tree *expr_p)
the expression pointer type. */
ddatype = TREE_TYPE (datype);
pddatype = build_pointer_type (ddatype);
- if (!useless_type_conversion_p (pddatype, ddatype))
+ if (!useless_type_conversion_p (TYPE_MAIN_VARIANT (TREE_TYPE (expr)),
+ pddatype))
return;
/* The lower bound and element sizes must be constant. */
@@ -1778,6 +1779,10 @@ canonicalize_addr_expr (tree *expr_p)
TYPE_MIN_VALUE (TYPE_DOMAIN (datype)),
NULL_TREE, NULL_TREE);
*expr_p = build1 (ADDR_EXPR, pddatype, *expr_p);
+
+ /* We can have stripped a required restrict qualifier above. */
+ if (!useless_type_conversion_p (TREE_TYPE (expr), TREE_TYPE (*expr_p)))
+ *expr_p = fold_convert (TREE_TYPE (expr), *expr_p);
}
/* *EXPR_P is a NOP_EXPR or CONVERT_EXPR. Remove it and/or other conversions