aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-strlen.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-06-30 20:45:18 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2016-06-30 20:45:18 +0200
commit55a0f21aba28fac542ec1b092089140f00eec2ed (patch)
tree346cd525dca5b49ae36a4d5075a82d931b2cc902 /gcc/tree-ssa-strlen.c
parent6245ad72d23867f979d0960bdde9a8427c6ba262 (diff)
downloadgcc-55a0f21aba28fac542ec1b092089140f00eec2ed.zip
gcc-55a0f21aba28fac542ec1b092089140f00eec2ed.tar.gz
gcc-55a0f21aba28fac542ec1b092089140f00eec2ed.tar.bz2
re PR tree-optimization/71707 (ICE in get_stridx_plus_constant)
PR tree-optimization/71707 * tree-ssa-strlen.c (get_stridx_plus_constant): Handle already present strinfo even for ADDR_EXPR ptr. * gcc.dg/strlenopt-29.c: New test. From-SVN: r237889
Diffstat (limited to 'gcc/tree-ssa-strlen.c')
-rw-r--r--gcc/tree-ssa-strlen.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c
index 232594b..489c8f0 100644
--- a/gcc/tree-ssa-strlen.c
+++ b/gcc/tree-ssa-strlen.c
@@ -677,8 +677,14 @@ get_stridx_plus_constant (strinfo *basesi, HOST_WIDE_INT off, tree ptr)
{
if (r == 0)
{
- gcc_assert (TREE_CODE (ptr) == SSA_NAME);
- ssa_ver_to_stridx[SSA_NAME_VERSION (ptr)] = si->idx;
+ if (TREE_CODE (ptr) == SSA_NAME)
+ ssa_ver_to_stridx[SSA_NAME_VERSION (ptr)] = si->idx;
+ else
+ {
+ int *pidx = addr_stridxptr (TREE_OPERAND (ptr, 0));
+ if (pidx != NULL && *pidx == 0)
+ *pidx = si->idx;
+ }
return si->idx;
}
break;