From c5b338ad9de795d6ea8341dba393254fecc66715 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Mon, 28 Dec 2009 02:41:07 +0100 Subject: re PR tree-optimization/42231 (Wrong generated code when using a callback function (possible callback function inlining bug ?)) 2009-12-27 Martin Jambor PR tree-optimization/42231 * testsuite/gcc.c-torture/execute/pr42231.c: New test. From-SVN: r155485 --- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gcc.c-torture/execute/pr42231.c | 35 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr42231.c (limited to 'gcc') diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dbf9831..349aa46 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 0000000..2e46f5f --- /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; +} -- cgit v1.1