yann@1: --- /dev/null Sat Dec 14 13:56:51 2002 yann@1: +++ gcc-3.3.1/gcc/testsuite/gcc.dg/pr10392-1.c Sun Sep 14 14:28:24 2003 yann@1: @@ -0,0 +1,62 @@ yann@1: +/* PR optimization/10392 yann@1: + * Reporter: marcus@mc.pp.se yann@1: + * Summary: [3.3/3.4 regression] [SH] optimizer generates faulty array indexing yann@1: + * Description: yann@1: + * The address calculation of an index operation on an array on the stack yann@1: + * can _under some conditions_ get messed up completely yann@1: + * yann@1: + * Testcase tweaked by dank@kegel.com yann@1: + * Problem only happens with -O2 -m4, so it should only happen on sh4, yann@1: + * but what the heck, let's test other architectures, too. yann@1: + * Not marked as xfail since it's a regression. yann@1: +*/ yann@1: +/* { dg-do run } */ yann@1: +/* { dg-options "-O2" } */ yann@1: +/* { dg-options "-O2 -m4" { target sh4-*-* } } */ yann@1: +const char *dont_optimize_function_away; yann@1: + yann@1: +const char *use(const char *str) yann@1: +{ yann@1: + dont_optimize_function_away = str; yann@1: + if (str[0] != 'v') yann@1: + abort(); yann@1: + if (str[1] < '1' || str[1] > '6') yann@1: + abort(); yann@1: + if (str[2]) yann@1: + abort(); yann@1: + return str[2] ? "notused" : "v6"; yann@1: +} yann@1: + yann@1: +const char *func(char *a, char *b) yann@1: +{ yann@1: + char buf[128]; yann@1: + unsigned char i; yann@1: + const char *result; yann@1: + yann@1: + char *item[] = { yann@1: + "v1", yann@1: + "v2", yann@1: + }; yann@1: + yann@1: + buf[0] = 'v'; yann@1: + buf[1] = '3'; yann@1: + buf[2] = 0; yann@1: + yann@1: + for (i = 0; i < 2; i++) { yann@1: + /* bug is: following line passes wild pointer to use() on sh4 -O2 */ yann@1: + result = use(item[i]); yann@1: + yann@1: + use(buf); yann@1: + use(a); yann@1: + use(b); yann@1: + result = use(result); yann@1: + } yann@1: + return result; yann@1: +} yann@1: + yann@1: +int main() yann@1: +{ yann@1: + func("v4", "v5"); yann@1: + return 0; yann@1: +} yann@1: +