Viewing file: pr10392-1.c (1.27 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* 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-*-* } } */ extern void abort (void); 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; }
|