diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-10-05 20:09:56 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-10-05 20:09:56 +0200 |
commit | 97246d787abf18f7ce9a3a49a1838bf23498d865 (patch) | |
tree | 99ed37acdae5a5c6f97be8b341cb72e795a2ff6d /gcc/tree-ssa-strlen.c | |
parent | 9974107a906967f6f6b5fa5f47a3825a480111f4 (diff) | |
download | gcc-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.c | 12 |
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; } |