re PR tree-optimization/61773 (ICE in tree-ssa-strlen.c:417)
PR tree-optimization/61773 * tree-ssa-strlen.c (get_string_length): Don't assert stpcpy has been prototyped if si->stmt is BUILT_IN_MALLOC. * gcc.dg/pr61773.c: New test. From-SVN: r217910
This commit is contained in:
parent
aa7da51a8c
commit
1e762c6ad8
|
@ -1,5 +1,9 @@
|
||||||
2014-11-21 Jakub Jelinek <jakub@redhat.com>
|
2014-11-21 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/61773
|
||||||
|
* tree-ssa-strlen.c (get_string_length): Don't assert
|
||||||
|
stpcpy has been prototyped if si->stmt is BUILT_IN_MALLOC.
|
||||||
|
|
||||||
PR target/63910
|
PR target/63910
|
||||||
* simplify-rtx.c (simplify_immed_subreg): Return NULL for integer
|
* simplify-rtx.c (simplify_immed_subreg): Return NULL for integer
|
||||||
modes wider than MAX_BITSIZE_MODE_ANY_INT. If not using
|
modes wider than MAX_BITSIZE_MODE_ANY_INT. If not using
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
2014-11-21 Jakub Jelinek <jakub@redhat.com>
|
2014-11-21 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/61773
|
||||||
|
* gcc.dg/pr61773.c: New test.
|
||||||
|
|
||||||
PR target/63764
|
PR target/63764
|
||||||
* c-c++-common/pr63764-1.c: New test.
|
* c-c++-common/pr63764-1.c: New test.
|
||||||
* c-c++-common/pr63764-2.c: New test.
|
* c-c++-common/pr63764-2.c: New test.
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
/* PR tree-optimization/61773 */
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O2" } */
|
||||||
|
|
||||||
|
void
|
||||||
|
foo (char **x)
|
||||||
|
{
|
||||||
|
char *p = __builtin_malloc (64);
|
||||||
|
char *q = __builtin_malloc (64);
|
||||||
|
__builtin_strcat (q, "abcde");
|
||||||
|
__builtin_strcat (p, "ab");
|
||||||
|
p[1] = q[3];
|
||||||
|
__builtin_strcat (p, q);
|
||||||
|
x[0] = p;
|
||||||
|
x[1] = q;
|
||||||
|
}
|
|
@ -430,7 +430,6 @@ get_string_length (strinfo si)
|
||||||
callee = gimple_call_fndecl (stmt);
|
callee = gimple_call_fndecl (stmt);
|
||||||
gcc_assert (callee && DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL);
|
gcc_assert (callee && DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL);
|
||||||
lhs = gimple_call_lhs (stmt);
|
lhs = gimple_call_lhs (stmt);
|
||||||
gcc_assert (builtin_decl_implicit_p (BUILT_IN_STPCPY));
|
|
||||||
/* unshare_strinfo is intentionally not called here. The (delayed)
|
/* unshare_strinfo is intentionally not called here. The (delayed)
|
||||||
transformation of strcpy or strcat into stpcpy is done at the place
|
transformation of strcpy or strcat into stpcpy is done at the place
|
||||||
of the former strcpy/strcat call and so can affect all the strinfos
|
of the former strcpy/strcat call and so can affect all the strinfos
|
||||||
|
@ -479,6 +478,7 @@ get_string_length (strinfo si)
|
||||||
case BUILT_IN_STRCPY_CHK:
|
case BUILT_IN_STRCPY_CHK:
|
||||||
case BUILT_IN_STRCPY_CHKP:
|
case BUILT_IN_STRCPY_CHKP:
|
||||||
case BUILT_IN_STRCPY_CHK_CHKP:
|
case BUILT_IN_STRCPY_CHK_CHKP:
|
||||||
|
gcc_assert (builtin_decl_implicit_p (BUILT_IN_STPCPY));
|
||||||
if (gimple_call_num_args (stmt) == (with_bounds ? 4 : 2))
|
if (gimple_call_num_args (stmt) == (with_bounds ? 4 : 2))
|
||||||
fn = builtin_decl_implicit (BUILT_IN_STPCPY);
|
fn = builtin_decl_implicit (BUILT_IN_STPCPY);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue