This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: fix rtl/23560
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Richard Henderson <rth at redhat dot com>, gcc-patches at gcc dot gnu dot org
- Date: Fri, 26 Aug 2005 12:29:32 -0400
- Subject: Re: fix rtl/23560
- References: <20050826071451.GA9898@redhat.com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Fri, Aug 26, 2005 at 12:14:51AM -0700, Richard Henderson wrote:
> * loop.c (biased_biv_may_wrap_p): New.
> (maybe_eliminate_biv_1): Use it to suppress non-equality
> comparison transformations. Delete disabled code.
You haven't committed the testcase with it, ok to commit?
Tested on HEAD with your patch applied.
2005-08-26 Jakub Jelinek <jakub@redhat.com>
PR rtl-opt/23560
* gcc.c-torture/execute/20050826-2.c: New test.
--- gcc/testsuite/gcc.c-torture/execute/20050826-2.c.jj 2005-08-22 12:21:00.108311280 +0200
+++ gcc/testsuite/gcc.c-torture/execute/20050826-2.c 2005-08-26 16:21:05.000000000 +0200
@@ -0,0 +1,62 @@
+/* PR rtl-optimization/23560 */
+
+struct rtattr
+{
+ unsigned short rta_len;
+ unsigned short rta_type;
+};
+
+__attribute__ ((noinline))
+int inet_check_attr (void *r, struct rtattr **rta)
+{
+ int i;
+
+ for (i = 1; i <= 14; i++)
+ {
+ struct rtattr *attr = rta[i - 1];
+ if (attr)
+ {
+ if (attr->rta_len - sizeof (struct rtattr) < 4)
+ return -22;
+ if (i != 9 && i != 8)
+ rta[i - 1] = attr + 1;
+ }
+ }
+ return 0;
+}
+
+extern void abort (void);
+
+int
+main (void)
+{
+ struct rtattr rt[2];
+ struct rtattr *rta[14];
+ int i;
+
+ rt[0].rta_len = sizeof (struct rtattr) + 8;
+ rt[0].rta_type = 0;
+ rt[1] = rt[0];
+ for (i = 0; i < 14; i++)
+ rta[i] = &rt[0];
+ if (inet_check_attr (0, rta) != 0)
+ abort ();
+ for (i = 0; i < 14; i++)
+ if (rta[i] != &rt[i != 7 && i != 8])
+ abort ();
+ for (i = 0; i < 14; i++)
+ rta[i] = &rt[0];
+ rta[1] = 0;
+ rt[1].rta_len -= 8;
+ rta[5] = &rt[1];
+ if (inet_check_attr (0, rta) != -22)
+ abort ();
+ for (i = 0; i < 14; i++)
+ if (i == 1 && rta[i] != 0)
+ abort ();
+ else if (i != 1 && i <= 5 && rta[i] != &rt[1])
+ abort ();
+ else if (i > 5 && rta[i] != &rt[0])
+ abort ();
+ return 0;
+}
Jakub