aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-03-18 09:13:17 +0100
committerRichard Biener <rguenther@suse.de>2020-03-18 09:14:48 +0100
commit4e3d3e40726e1b68bf52fa205c68495124ea60b8 (patch)
treec40b5b145bca1448d3196a5857b9fd30bbd77c8f /gcc/gimple-fold.c
parentaf8656be8df68ac26840f7844430fd595255ebd2 (diff)
downloadgcc-4e3d3e40726e1b68bf52fa205c68495124ea60b8.zip
gcc-4e3d3e40726e1b68bf52fa205c68495124ea60b8.tar.gz
gcc-4e3d3e40726e1b68bf52fa205c68495124ea60b8.tar.bz2
middle-end/94188 fix fold of addr expression generation
This adds a missing type conversion to build_fold_addr_expr and adjusts fallout - build_fold_addr_expr was used as a convenience to build an ADDR_EXPR but some callers do not expect the result to be simplified to something else. 2020-03-18 Richard Biener <rguenther@suse.de> PR middle-end/94188 * fold-const.c (build_fold_addr_expr): Convert address to correct type. * asan.c (maybe_create_ssa_name): Strip useless type conversions. * gimple-fold.c (gimple_fold_stmt_to_constant_1): Use build1 to build the ADDR_EXPR which we don't really want to simplify. * tree-ssa-dom.c (record_equivalences_from_stmt): Likewise. * tree-ssa-loop-im.c (gather_mem_refs_stmt): Likewise. * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Likewise. (simplify_builtin_call): Strip useless type conversions. * tree-ssa-strlen.c (new_strinfo): Likewise. * gcc.dg/pr94188.c: New testcase.
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r--gcc/gimple-fold.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 9e45cc5..3f17de9 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -6413,8 +6413,8 @@ gimple_fold_stmt_to_constant_1 (gimple *stmt, tree (*valueize) (tree),
&& TREE_CODE (op1) == INTEGER_CST)
{
tree off = fold_convert (ptr_type_node, op1);
- return build_fold_addr_expr_loc
- (loc,
+ return build1_loc
+ (loc, ADDR_EXPR, TREE_TYPE (op0),
fold_build2 (MEM_REF,
TREE_TYPE (TREE_TYPE (op0)),
unshare_expr (op0), off));