diff options
author | J"orn Rennecke <joern.rennecke@superh.com> | 2004-01-16 18:24:09 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2004-01-16 18:24:09 +0000 |
commit | 9e0baa604103abcb676222364f1fa51e1f006203 (patch) | |
tree | b526ff246113ff724e32293f5f01a1a6299b2dd2 | |
parent | 87b483a1c4d9e7a2d4aa2ecc581557b9138eef85 (diff) | |
download | gcc-9e0baa604103abcb676222364f1fa51e1f006203.zip gcc-9e0baa604103abcb676222364f1fa51e1f006203.tar.gz gcc-9e0baa604103abcb676222364f1fa51e1f006203.tar.bz2 |
re PR rtl-optimization/10392 ([SH] optimizer generates faulty array indexing)
PR 10392
From Marcus Comstedt / Dan Kegel:
* gcc.dg/pr10392-1.c: New test.
From-SVN: r75985
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr10392-1.c | 62 |
2 files changed, 68 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a9f2858..b5d83dc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-01-16 J"orn Rennecke <joern.rennecke@superh.com> + + PR 10392 + From Marcus Comstedt / Dan Kegel: + * gcc.dg/pr10392-1.c: New test. + 2004-01-16 Mark Mitchell <mark@codesourcery.com> PR c++/13478 diff --git a/gcc/testsuite/gcc.dg/pr10392-1.c b/gcc/testsuite/gcc.dg/pr10392-1.c new file mode 100644 index 0000000..c71ec4d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr10392-1.c @@ -0,0 +1,62 @@ +/* PR optimization/10392 + * Reporter: marcus@mc.pp.se + * Summary: [3.3/3.4 regression] [SH] optimizer generates faulty array indexing + * Description: + * The address calculation of an index operation on an array on the stack + * can _under some conditions_ get messed up completely + * + * Testcase tweaked by dank@kegel.com + * Problem only happens with -O2 -m4, so it should only happen on sh4, + * but what the heck, let's test other architectures, too. + * Not marked as xfail since it's a regression. +*/ +/* { dg-do run } */ +/* { dg-options "-O2" } */ +/* { dg-options "-O2 -m4" { target sh4-*-* } } */ +const char *dont_optimize_function_away; + +const char *use(const char *str) +{ + dont_optimize_function_away = str; + if (str[0] != 'v') + abort(); + if (str[1] < '1' || str[1] > '6') + abort(); + if (str[2]) + abort(); + return str[2] ? "notused" : "v6"; +} + +const char *func(char *a, char *b) +{ + char buf[128]; + unsigned char i; + const char *result; + + char *item[] = { + "v1", + "v2", + }; + + buf[0] = 'v'; + buf[1] = '3'; + buf[2] = 0; + + for (i = 0; i < 2; i++) { + /* bug is: following line passes wild pointer to use() on sh4 -O2 */ + result = use(item[i]); + + use(buf); + use(a); + use(b); + result = use(result); + } + return result; +} + +int main() +{ + func("v4", "v5"); + return 0; +} + |