diff options
author | Richard Guenther <rguenther@suse.de> | 2009-08-13 08:19:10 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-08-13 08:19:10 +0000 |
commit | e5fdcd8cc54cacb910bd9730ce60626b155f1bb1 (patch) | |
tree | 19e33361b8467654e1998b29231dec999536e09a /gcc/gimplify.c | |
parent | 61a28f2135b9e22ef505ee60f92031a48263e0b0 (diff) | |
download | gcc-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.c | 7 |
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 |