OSDN Git Service

2009-12-27 Martin Jambor <mjambor@suse.cz>
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Dec 2009 01:41:07 +0000 (01:41 +0000)
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Dec 2009 01:41:07 +0000 (01:41 +0000)
PR tree-optimization/42231
* testsuite/gcc.c-torture/execute/pr42231.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155485 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr42231.c [new file with mode: 0644]

index dbf9831..349aa46 100644 (file)
@@ -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 (file)
index 0000000..2e46f5f
--- /dev/null
@@ -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;
+}