diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dbf9831cc65..349aa46d09d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-12-27 Martin Jambor + + PR tree-optimization/42231 + * gcc.c-torture/execute/pr42231.c: New test. + 2009-12-27 Francois-Xavier Coudert Daniel Kraft diff --git a/gcc/testsuite/gcc.c-torture/execute/pr42231.c b/gcc/testsuite/gcc.c-torture/execute/pr42231.c new file mode 100644 index 00000000000..2e46f5f3604 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr42231.c @@ -0,0 +1,35 @@ +extern void abort (void); + +static max; + +static void __attribute__((noinline)) storemax (int i) +{ + if (i > max) + max = i; +} + +static int CallFunctionRec(int (*fun)(int depth), int depth) { + if (!fun(depth)) { + return 0; + } + if (depth < 10) { + CallFunctionRec(fun, depth + 1); + } + return 1; +} + +static int CallFunction(int (*fun)(int depth)) { + return CallFunctionRec(fun, 1) && !fun(0); +} + +static int callback(int depth) { + storemax (depth); + return depth != 0; +} + +int main() { + CallFunction(callback); + if (max != 10) + abort (); + return 0; +}