aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-strlen.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-10-05 20:09:56 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2011-10-05 20:09:56 +0200
commit97246d787abf18f7ce9a3a49a1838bf23498d865 (patch)
tree99ed37acdae5a5c6f97be8b341cb72e795a2ff6d /gcc/tree-ssa-strlen.c
parent9974107a906967f6f6b5fa5f47a3825a480111f4 (diff)
downloadgcc-97246d787abf18f7ce9a3a49a1838bf23498d865.zip
gcc-97246d787abf18f7ce9a3a49a1838bf23498d865.tar.gz
gcc-97246d787abf18f7ce9a3a49a1838bf23498d865.tar.bz2
re PR tree-optimization/50613 (ICE: tree check: expected ssa_name, have addr_expr in find_equal_ptrs, at tree-ssa-strlen.c:712 with -foptimize-strlen -fno-tree-ccp)
PR tree-optimization/50613 * tree-ssa-strlen.c (find_equal_ptrs): If CASE_CONVERT operand is ADDR_EXPR, fallthru into ADDR_EXPR handling, and if it is neither that not SSA_NAME, give up. * gcc.dg/pr50613.c: New test. From-SVN: r179567
Diffstat (limited to 'gcc/tree-ssa-strlen.c')
-rw-r--r--gcc/tree-ssa-strlen.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c
index b2ee2f9..d997c73 100644
--- a/gcc/tree-ssa-strlen.c
+++ b/gcc/tree-ssa-strlen.c
@@ -692,6 +692,14 @@ find_equal_ptrs (tree ptr, int idx)
{
case SSA_NAME:
break;
+ CASE_CONVERT:
+ if (!POINTER_TYPE_P (TREE_TYPE (ptr)))
+ return;
+ if (TREE_CODE (ptr) == SSA_NAME)
+ break;
+ if (TREE_CODE (ptr) != ADDR_EXPR)
+ return;
+ /* FALLTHRU */
case ADDR_EXPR:
{
int *pidx = addr_stridxptr (TREE_OPERAND (ptr, 0));
@@ -699,10 +707,6 @@ find_equal_ptrs (tree ptr, int idx)
*pidx = idx;
return;
}
- CASE_CONVERT:
- if (POINTER_TYPE_P (TREE_TYPE (ptr)))
- break;
- return;
default:
return;
}