mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-12 07:10:26 +08:00
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
This commit is contained in:
parent
a85f9f14de
commit
c5b338ad9d
@ -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>
|
||||
|
||||
|
35
gcc/testsuite/gcc.c-torture/execute/pr42231.c
Normal file
35
gcc/testsuite/gcc.c-torture/execute/pr42231.c
Normal file
@ -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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user