From fe5c443ea50fd90cba2352d5482d709fd2511d5b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 2 Dec 2008 18:14:18 +0100 Subject: [PATCH] re PR middle-end/38343 (ice for legal code with -O2) PR middle-end/38343 * builtins.c (fold_builtin_memory_op): Convert len to sizetype before using it in POINTER_PLUS_EXPR. * gcc.c-torture/compile/pr38343-2.c: New test. From-SVN: r142363 --- gcc/ChangeLog | 6 ++++++ gcc/builtins.c | 1 + gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr38343-2.c | 12 ++++++++++++ 4 files changed, 24 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr38343-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 843b221..a0a839c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-12-02 Jakub Jelinek + + PR middle-end/38343 + * builtins.c (fold_builtin_memory_op): Convert len to sizetype + before using it in POINTER_PLUS_EXPR. + 2008-12-02 Richard Guenther PR tree-optimization/38359 diff --git a/gcc/builtins.c b/gcc/builtins.c index 3406667..444baa6 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -8993,6 +8993,7 @@ fold_builtin_memory_op (tree dest, tree src, tree len, tree type, bool ignore, i len = fold_build2 (MINUS_EXPR, TREE_TYPE (len), len, ssize_int (1)); + len = fold_convert (sizetype, len); dest = fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (dest), dest, len); dest = fold_convert (type, dest); if (expr) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 33d0f86..a08d83b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-12-02 Jakub Jelinek + + PR middle-end/38343 + * gcc.c-torture/compile/pr38343-2.c: New test. + 2008-12-02 Richard Guenther PR tree-optimization/38359 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr38343-2.c b/gcc/testsuite/gcc.c-torture/compile/pr38343-2.c new file mode 100644 index 0000000..8444cc7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr38343-2.c @@ -0,0 +1,12 @@ +/* PR middle-end/38343 */ + +static struct S +{ + char f[6]; +} s[] = { {"01000"} }; + +char * +foo (void) +{ + return __builtin_stpcpy (s[0].f, "S0022"); +} -- 2.7.4