diff options
author | Martin Jambor <mjambor@suse.cz> | 2009-12-28 02:41:07 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2009-12-28 02:41:07 +0100 |
commit | c5b338ad9de795d6ea8341dba393254fecc66715 (patch) | |
tree | 48d7e9e859eac007f9b9beb1b04ce3b36953bffa | |
parent | a85f9f14de8c01ccacdef98ade162f37d7b9eca3 (diff) | |
download | gcc-c5b338ad9de795d6ea8341dba393254fecc66715.zip gcc-c5b338ad9de795d6ea8341dba393254fecc66715.tar.gz gcc-c5b338ad9de795d6ea8341dba393254fecc66715.tar.bz2 |
re PR tree-optimization/42231 (Wrong generated code when using a callback function (possible callback function inlining bug ?))
2009-12-27 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/42231
* testsuite/gcc.c-torture/execute/pr42231.c: New test.
From-SVN: r155485
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/pr42231.c | 35 |
2 files changed, 40 insertions, 0 deletions
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 <mjambor@suse.cz> + + PR tree-optimization/42231 + * gcc.c-torture/execute/pr42231.c: New test. + 2009-12-27 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> Daniel Kraft <d@domob.eu> 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; +} |