condexec-1.c   [plain text]


/* APPLE LOCAL file ARM 5814138 */
/* Sequential if statements were being translated into conditionally-
   executed instructions with an incorrect condition.  */
/* { dg-do run } */
/* { dg-options "-O2" } */
int bug (int n1, int n2, int *d1, int *d2)
{
    int flag = 0, test, x, x1, x2;

    while (n1 != 0 && n2 != 0)
    {
	x1 = *d1, x2 = *d2;
	test = x1 - x2;
	if (test >= 0)
	    x = x2, d2++, n2--, flag ^= 2;
	if (test <= 0)
	    x = x1, d1++, n1--, flag ^= 1;
	if (flag == 3)
	    return 1;
    }

    return 0;
}

int arr1[5] = {1, 2, 3, 4, 5};
int arr2[5] = {0, -1, -2, -3, -4};
int arr3[5] = {7, 8, 9, 10, 11};

int main (void)
{
  return bug (5, 5, arr1, arr2) || bug (5, 5, arr1, arr3);
}