From: Jakub Jelinek Date: Wed, 5 Oct 2011 18:09:56 +0000 (+0200) Subject: re PR tree-optimization/50613 (ICE: tree check: expected ssa_name, have addr_expr... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=97246d787abf18f7ce9a3a49a1838bf23498d865;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 800d69aab78..b37b082fa4b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-10-05 Jakub Jelinek + + 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. + 2011-10-05 Richard Henderson * tree-vect-generic.c (vector_element): Never fail. Use diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4ad91390b2a..df734609154 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-10-05 Jakub Jelinek + + PR tree-optimization/50613 + * gcc.dg/pr50613.c: New test. + 2011-10-05 Richard Henderson * gcc.c-torture/execute/vect-shuffle-1.c: Rewrite. diff --git a/gcc/testsuite/gcc.dg/pr50613.c b/gcc/testsuite/gcc.dg/pr50613.c new file mode 100644 index 00000000000..27c6fba3636 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr50613.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/50613 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-tree-ccp" } */ + +#include "strlenopt.h" + +char buf[26]; + +static inline void +bar (char *__restrict dest, const char *__restrict src) +{ + strcpy (dest, src); +} + +void +foo (char *p) +{ + if (strlen (p) < 50) + bar (buf, p); +} diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c index b2ee2f96f44..d997c73451e 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; }