re PR rtl-optimization/23560 (Strength-reduction breaking unsigned COMPARE)

PR rtl-opt/23560
	* gcc.c-torture/execute/20050826-2.c: New test.

From-SVN: r103540
This commit is contained in:
Jakub Jelinek 2005-08-26 23:59:25 +02:00 committed by Jakub Jelinek
parent 52e772ba4b
commit ff8afde0ea
2 changed files with 67 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2005-08-26 Jakub Jelinek <jakub@redhat.com>
PR rtl-opt/23560
* gcc.c-torture/execute/20050826-2.c: New test.
2005-08-26 Dale Johannesen <dalej@apple.com>
* gcc.dg/20030711-1.c: Modify to work on Darwin.

View File

@ -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;
}