re PR rtl-optimization/55273 (ICE in iv_number_of_iterations, at loop-iv.c:2819)
authorJan Hubicka <jh@suse.cz>
Thu, 17 Jan 2013 16:27:23 +0000 (17:27 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 17 Jan 2013 16:27:23 +0000 (16:27 +0000)
PR tree-optimizatoin/51083

* gcc.c-torture/compile/pr51083.c: New testcase.

* loop-iv.c (iv_number_of_iterations): Consider zero iteration case.

From-SVN: r195274

gcc/ChangeLog
gcc/loop-iv.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr51083.c [new file with mode: 0644]

index 1bf9288ee9b8da37ec73dcf3b71a50735ac8c9ad..c30e4d4362051577dd6b7ccc5324cf2919bf9109 100644 (file)
@@ -1,3 +1,8 @@
+2013-01-17  Jan Hubicka  <jh@suse.cz>
+
+       PR tree-optimization/51083
+       * loop-iv.c (iv_number_of_iterations): Consider zero iteration case.
+
 2012-01-17  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/55981
index 62a3c6f03e5ff598d64d64a9f28819f9dee40013..15f16619863dfd50e093fca171de4f6b8107f7a4 100644 (file)
@@ -2819,7 +2819,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
   else
     {
       max = determine_max_iter (loop, desc, old_niter);
-      gcc_assert (max);
+      if (!max)
+       goto zero_iter_simplify;
       if (!desc->infinite
          && !desc->assumptions)
        record_niter_bound (loop, double_int::from_uhwi (max),
index dc25943f8cdecc1fdc3851534fb16ae823b2b0af..108f308629bcb3c02812b6bf65572a3b4750dc10 100644 (file)
@@ -1,3 +1,8 @@
+2013-01-17  Jan Hubicka  <jh@suse.cz>
+
+       PR tree-optimization/51083
+       * gcc.c-torture/compile/pr51083.c: New testcase.
+
 2012-01-17  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/55981
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr51083.c b/gcc/testsuite/gcc.c-torture/compile/pr51083.c
new file mode 100644 (file)
index 0000000..8ae5199
--- /dev/null
@@ -0,0 +1,18 @@
+extern int debug_threads;
+extern void sigsuspend (void);
+void my_waitpid (int flags, int wnohang)
+{
+  while (1)
+    {
+      if (flags & 0x80000000)
+        {
+          if (wnohang)
+            break;
+          if (debug_threads)
+            __builtin_puts ("blocking\n");
+          sigsuspend ();
+        }
+      flags ^= 0x80000000;
+    }
+}
+