aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2009-12-28 02:41:07 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2009-12-28 02:41:07 +0100
commitc5b338ad9de795d6ea8341dba393254fecc66715 (patch)
tree48d7e9e859eac007f9b9beb1b04ce3b36953bffa /gcc
parenta85f9f14de8c01ccacdef98ade162f37d7b9eca3 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr42231.c35
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;
+}